Skip to main content
O Prisma ORM é um ORM para TypeScript com schema declarativo, uma ferramenta de migração (Prisma Migrate) e um cliente gerado com tipagem segura. Neste guia, você vai conectar o Prisma ao ClickHouse Managed Postgres, criar uma tabela por meio de uma migração e consultá-la a partir de um script e de um pequeno endpoint HTTP. Este guia usa o Prisma ORM 7 (testado com 7.10.0), o lançamento estável atual.

Pré-requisitos

  • Node.js 20.19, 22.12 ou 24 (ou posterior)
  • Um serviço ClickHouse Managed Postgres
  • psql, para criar o banco de dados. Você também pode executar a instrução CREATE DATABASE no SQL Console.
  • No macOS: Docker, para executar o Prisma Migrate (consulte Executar a migração)

Crie um serviço ClickHouse Managed Postgres

No console do ClickHouse Cloud, clique em New service e selecione Postgres. A instância fica pronta em poucos minutos. Para um passo a passo completo, consulte o guia de início rápido.

Obtenha os detalhes de conexão

Clique em Connect na barra lateral esquerda do seu serviço. O modal exibe seu nome de usuário, senha, servidor e porta, além de strings de conexão prontas para uso. Este guia usa duas conexões, pois o Prisma tem dois componentes que se comunicam com o banco de dados:
  • Sua aplicação (Prisma Client) se conecta via PgBouncer na porta 6432. O PgBouncer faz o pooling de conexões, permitindo que muitos processos da aplicação ou instâncias serverless compartilhem um pequeno número de backends do Postgres.
  • O Prisma CLI (Prisma Migrate) se conecta diretamente na porta 5432. Durante a execução, o Prisma Migrate adquire um bloqueio consultivo (advisory lock) em nível de sessão. No modo de pooling de transações do PgBouncer, esse bloqueio pode continuar retido em um backend do pool que passa a atender outros clientes, e as migrações seguintes ficam travadas aguardando sua liberação.
Na parte superior do modal, alterne entre Directly e via PgBouncer para ver cada porta. O servidor e as credenciais são os mesmos nas duas conexões; apenas a porta muda. Com via PgBouncer selecionado, clique em Download CA certificate. Com Directly selecionado, ative antes a opção Use SSL para que o botão apareça. O arquivo se chama <service-name>-ca-certificate.pem. Ele também está disponível em Settings → CA Certificate. O certificado é exclusivo da sua instância e é usado para conectar com sslmode=verify-full, que verifica se você está se comunicando com o seu próprio servidor.

Configure o projeto

Crie um projeto TypeScript e instale a Prisma CLI, o Prisma Client, o adaptador de driver node-postgres e o dotenv:
Instale explicitamente prisma@7 e @prisma/client@7. No momento em que este texto foi escrito, a tag latest do prisma no npm aponta para uma versão release candidate do Prisma 8, que usa uma configuração diferente da descrita neste guia.
Crie um arquivo tsconfig.json:
Vai adicionar a um aplicativo existente?Pule o mkdir, o npm init e o tsconfig.json. No seu projeto, execute npm install tsx @types/pg prisma@7 --save-dev e npm install @prisma/client@7 @prisma/adapter-pg pg dotenv e depois siga para Inicializar o Prisma.

Inicializar o Prisma

1

Execute prisma init

Isso cria prisma/schema.prisma e o arquivo de configuração do Prisma prisma7.config.ts, adiciona um DATABASE_URL provisório ao .env e o cliente gerado ao .gitignore (criando esses arquivos, se necessário), além de adicionar as skills do Prisma para agentes de programação com IA. A partir da versão 7.10, o Prisma nomeia o arquivo de configuração como prisma7.config.ts para evitar conflito com o formato do Prisma 8.
2

Adicione o certificado da CA

Mova o certificado da CA que você baixou para a raiz do projeto e renomeie-o para ca-certificate.pem:
Caminhos relativos de certificados são resolvidos a partir do diretório em que você executa os comandos. Por isso, execute todos os comandos deste guia a partir da raiz do projeto.

Configure a conexão

1

Crie um banco de dados

Crie um banco de dados para a aplicação. Substitua <PASSWORD> e o host pelos valores exibidos no modal Connect:
2

Defina as URLs de conexão

No arquivo .env, substitua o DATABASE_URL provisório adicionado pelo prisma init por estas duas URLs de conexão, ambas apontando para o banco de dados guide_prisma. Use a senha exibida no modal Connect:
As duas URLs usam parâmetros de TLS diferentes porque são lidas por drivers diferentes:
  • DATABASE_URL é lida pelo node-postgres por meio do @prisma/adapter-pg. Ela aceita os parâmetros padrão sslmode=verify-full&sslrootcert=..., os mesmos exibidos no modal Connect.
  • DIRECT_URL é lida pelo motor de schema da Prisma CLI, que tem parâmetros próprios: sslcert é o caminho para o certificado da CA, e sslaccept=strict ativa a verificação do certificado e do hostname.
Não use sslmode=verify-full&sslrootcert=... na URL da Prisma CLI. O motor de schema ignora sslrootcert e, sem sslaccept=strict, simplesmente não verifica o certificado do servidor. Com isso, a conexão fica criptografada, mas não autenticada.
3

Aponte a Prisma CLI para a conexão direta

Substitua o conteúdo de prisma7.config.ts:
No Prisma 7, a URL definida no arquivo de configuração é usada apenas pela CLI. O Prisma Client obtém a conexão pelo adaptador de driver, que você configura em Consulte o banco de dados.

Defina o schema e execute a migração

1

Adicione um model

Adicione um model Todo ao final de prisma/schema.prisma:
2

Execute a migração

No Linux, execute o Prisma Migrate diretamente:
No macOS, execute o mesmo comando em um contêiner Linux:
O ClickHouse Managed Postgres aceita apenas TLS 1.3. No macOS, o motor de schema da Prisma CLI usa a biblioteca TLS do sistema, que não consegue se conectar com essas configurações. A conexão falha com P1011: Error opening a TLS connection: One or more parameters passed to a function were not valid ou, se você remover sslcert, com bad protocol version (prisma/orm#29600). Isso afeta apenas os comandos da CLI que se conectam ao banco de dados, como prisma migrate e prisma db pull. O Prisma Client não é afetado, pois se conecta por meio do node-postgres. Para contornar o problema, execute a CLI em um contêiner Linux ou no seu pipeline de CI baseado em Linux.
O Prisma cria a migração SQL em prisma/migrations/ e a aplica:
3

Gere o Prisma Client

O cliente é gerado em generated/prisma. Como esse comando não se conecta ao banco de dados, você pode executá-lo em qualquer plataforma.

Consultar o banco de dados

1

Criar o Prisma Client

Crie lib/prisma.ts. O adaptador PrismaPg se conecta usando a DATABASE_URL, por meio do PgBouncer:
Nenhuma configuração do PgBouncer é necessáriaO @prisma/adapter-pg envia cada consulta como um prepared statement sem nome e nunca executa DEALLOCATE, o que é compatível com o modo de pooling de transações do PgBouncer. Ele processa centenas de consultas distintas em execução simultânea nos backends do pool sem erros. O parâmetro de URL pgbouncer=true, usado em versões mais antigas do Prisma, não é necessário e não tem efeito com o adaptador de driver.
2

Executar consultas CRUD

Crie script.ts:
Execute o script:
3

Servir os dados via HTTP

Crie server.ts, um servidor HTTP mínimo que cria todos com POST /todos e os lista em qualquer requisição GET:
Inicie o servidor:
Em outro terminal, adicione dois todos:
Abra http://localhost:3000/todos no navegador para visualizá-los. A resposta será semelhante a esta:

Verifique no SQL Console

No console do ClickHouse Cloud, abra o SQL Console do seu serviço, expanda o seu banco de dados e o schema public e selecione a tabela Todo. Você também verá a tabela _prisma_migrations, onde o Prisma Migrate registra as migrações aplicadas. A tabela Todo contém as duas linhas que você adicionou pelo endpoint HTTP:

Solução de problemas

Próximos passos