Skip to main content
Prisma ORM — это ORM для TypeScript с декларативной схемой, инструментом миграций (Prisma Migrate) и генерируемым типобезопасным клиентом. В этом руководстве вы подключите Prisma к ClickHouse Managed Postgres, создадите таблицу с помощью миграции и будете выполнять к ней запросы из скрипта и через небольшую HTTP-конечную точку. В руководстве используется Prisma ORM 7 (проверено на версии 7.10.0) — текущий стабильный релиз.

Предварительные требования

  • Node.js 20.19, 22.12 или 24 и выше
  • Сервис ClickHouse Managed Postgres
  • psql для создания базы данных. Оператор CREATE DATABASE также можно выполнить в консоли SQL.
  • В macOS: Docker для запуска Prisma Migrate (см. Выполнение миграции)

Создание сервиса ClickHouse Managed Postgres

В консоли ClickHouse Cloud нажмите New service и выберите Postgres. Инстанс будет готов через несколько минут. Пошаговое описание процесса приведено в кратком руководстве по началу работы.

Получите сведения о подключении

Нажмите Connect на левой боковой панели вашего сервиса. В открывшемся модальном окне отображаются имя пользователя, пароль, сервер и порт, а также готовые строки подключения. В этом руководстве используются два соединения, поскольку в Prisma есть два компонента, которые обращаются к базе данных:
  • Ваше приложение (Prisma Client) подключается через PgBouncer на порту 6432. PgBouncer объединяет соединения в пул, поэтому множество процессов приложения или serverless-инстансов могут совместно использовать небольшое число backend-соединений Postgres.
  • Prisma CLI (Prisma Migrate) подключается напрямую на порту 5432. Во время работы Prisma Migrate захватывает рекомендательную блокировку (advisory lock) на уровне сеанса. В режиме пулинга транзакций PgBouncer эта блокировка может так и остаться на backend-соединении из пула, которое затем обслуживает других клиентов, и последующие миграции будут ждать её снятия.
В верхней части модального окна переключайтесь между Directly и via PgBouncer, чтобы увидеть порт для каждого варианта. Сервер и учётные данные для обоих соединений одинаковы — отличается только порт. Выбрав via PgBouncer, нажмите Download CA‑сертификат. Если выбран вариант Directly, сначала включите Use SSL — только тогда появится эта кнопка. Файл называется <service-name>-ca-certificate.pem. Его также можно найти в разделе Settings → CA‑сертификат. Сертификат уникален для вашего инстанса и используется для подключения с sslmode=verify-full: этот режим проверяет, что вы подключаетесь именно к своему серверу.

Настройка проекта

Создайте проект на TypeScript и установите Prisma CLI, Prisma Client, адаптер драйвера node-postgres и dotenv:
Явно укажите версии при установке: prisma@7 и @prisma/client@7. На момент написания этого руководства npm-тег latest пакета prisma указывает на релиз-кандидат Prisma 8, который настраивается иначе, чем описано здесь.
Создайте файл tsconfig.json:
Добавляете в существующее приложение?Пропустите mkdir, npm init и создание tsconfig.json. В своём проекте выполните npm install tsx @types/pg prisma@7 --save-dev и npm install @prisma/client@7 @prisma/adapter-pg pg dotenv, а затем переходите к разделу Инициализация Prisma.

Инициализация Prisma

1

Запустите prisma init

Эта команда создаёт prisma/schema.prisma и файл конфигурации Prisma prisma7.config.ts, добавляет плейсхолдер DATABASE_URL в .env, а сгенерированный клиент — в .gitignore (при необходимости создавая эти файлы), а также устанавливает навыки Prisma для AI-агентов для написания кода. Начиная с версии Prisma 7.10, файл конфигурации называется prisma7.config.ts, чтобы не возникало конфликта с форматом Prisma 8.
2

Добавьте CA‑сертификат

Переместите скачанный CA‑сертификат в корень проекта и переименуйте его в ca-certificate.pem:
Относительные пути к сертификатам вычисляются от каталога, в котором выполняются команды, поэтому запускайте все команды из этого руководства из корня проекта.

Настройка соединения

1

Создайте базу данных

Создайте базу данных для приложения. Замените <PASSWORD> и хост значениями из модального окна Connect:
2

Задайте URL-адреса соединений

В файле .env замените плейсхолдер DATABASE_URL, добавленный командой prisma init, двумя URL-адресами соединений, оба из которых указывают на базу данных guide_prisma. Используйте пароль из модального окна Connect:
В этих URL используются разные параметры TLS, поскольку их считывают разные драйверы:
  • DATABASE_URL считывает node-postgres через @prisma/adapter-pg. Он поддерживает стандартные параметры sslmode=verify-full&sslrootcert=... — те же, что указаны в модальном окне Connect.
  • DIRECT_URL считывает движок схем Prisma CLI, у которого свои параметры: sslcert — путь к CA‑сертификату, а sslaccept=strict включает проверку сертификата и имени хоста.
Не используйте sslmode=verify-full&sslrootcert=... в URL для Prisma CLI. Движок схем игнорирует sslrootcert, а без sslaccept=strict вообще не проверяет сертификат сервера: соединение будет зашифровано, но подлинность сервера не будет подтверждена.
3

Направьте Prisma CLI на прямое соединение

Замените содержимое файла prisma7.config.ts:
В Prisma 7 URL из файла конфигурации использует только CLI. Prisma Client получает соединение от адаптера драйвера, который настраивается в разделе Запросы к базе данных.

Определение схемы и выполнение миграции

1

Добавьте модель

Добавьте модель Todo в конец файла prisma/schema.prisma:
2

Выполните миграцию

В Linux запустите Prisma Migrate напрямую:
В macOS выполните ту же команду в Linux-контейнере:
ClickHouse Managed Postgres поддерживает только TLS 1.3. В macOS движок схем Prisma CLI использует системную библиотеку TLS, которая не может установить соединение с такими настройками. Команда завершается ошибкой P1011: Error opening a TLS connection: One or more parameters passed to a function were not valid, а если удалить sslcert, — ошибкой bad protocol version (prisma/orm#29600). Проблема касается только команд CLI, которые подключаются к базе данных, например prisma migrate и prisma db pull. На Prisma Client она не влияет, поскольку он подключается через node-postgres. Чтобы обойти проблему, запускайте CLI в Linux-контейнере или в конвейере CI на базе Linux.
Prisma создаёт SQL-миграцию в prisma/migrations/ и применяет её:
3

Сгенерируйте Prisma Client

Клиент генерируется в каталог generated/prisma. Эта команда не подключается к базе данных, поэтому её можно запускать на любой платформе.

Выполнение запросов к базе данных

1

Создайте Prisma Client

Создайте lib/prisma.ts. Адаптер PrismaPg подключается через PgBouncer, используя DATABASE_URL:
Настраивать PgBouncer не нужно@prisma/adapter-pg отправляет каждый запрос как безымянный подготовленный оператор и никогда не выполняет DEALLOCATE, поэтому он совместим с режимом пулинга транзакций PgBouncer. Адаптер без ошибок обрабатывает сотни различных запросов, параллельно выполняемых на backend-соединениях из пула. Параметр URL pgbouncer=true из старых версий Prisma не нужен: с адаптером драйвера он ни на что не влияет.
2

Выполните CRUD-запросы

Создайте script.ts:
Запустите скрипт:
3

Предоставьте доступ к данным по HTTP

Создайте server.ts — минимальный HTTP-сервер, который создаёт задачи по запросу POST /todos и возвращает их список на любой запрос GET:
Запустите сервер:
В другом терминале добавьте две задачи:
Чтобы увидеть их, откройте в браузере http://localhost:3000/todos. Ответ будет выглядеть так:

Проверка в консоли SQL

В консоли ClickHouse Cloud откройте консоль SQL для своего сервиса, разверните свою базу данных и схему public, затем выберите таблицу Todo. Там же вы увидите таблицу _prisma_migrations, в которой Prisma Migrate фиксирует применённые миграции. Таблица Todo содержит две строки, добавленные через конечную точку HTTP:

Устранение неполадок

Дальнейшие шаги

Последнее изменение 14 октября 2026 г.