Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA
LiçãoIntermediáriocódigo testado

Como instalar Prisma 7 com PostgreSQL

Configure Prisma ORM 7.9.1 com ESM, prisma.config.ts, Client gerado e adapter-pg conectado a um PostgreSQL 18, com comandos e saídas testados.

Rodolfo Mori5 min de leitura

Para instalar Prisma 7 com PostgreSQL, configure o projeto como ESM, instale Prisma Client, CLI, pg e @prisma/adapter-pg, crie prisma.config.ts, defina um output no generator e entregue o adapter ao new PrismaClient. Ao final, uma consulta real mostrará a versão do banco e um registro criado.

Esta lição parte de Node e npm funcionando. Ela usa um PostgreSQL descartável em Docker para não tocar no banco de outro projeto. Se você ainda mistura banco, SQL e ORM, leia primeiro o guia de Prisma e o guia de PostgreSQL.

A tomada, o aparelho e o adaptador

Imagine um aparelho com um plugue e uma tomada de outro padrão. Saber que ambos trabalham com energia não faz o encaixe acontecer; você precisa de uma peça que traduza o formato de conexão. No Prisma 7, o Client é o aparelho, o driver pg é a conexão PostgreSQL e @prisma/adapter-pg é o adaptador entre eles.

O mapeamento técnico vai além do nome: Prisma Client produz operações, o adapter converte a chamada para a interface do driver e pg mantém conexões com o servidor. O limite da analogia é que o adapter também transporta erros e opções de pool; ele não é apenas um formato físico. Sem ele, o Client atual nem inicia a conexão.

Esse é o primeiro modelo mental para reconhecer tutorial desatualizado. Se o código chama new PrismaClient() sem opções e diz que está ensinando Prisma 7 com PostgreSQL, falta uma peça obrigatória.

Confirme as versões antes de criar arquivos

Os exemplos foram executados com Node 24.16.0 e Prisma 7.9.1. Confira Node e npm:

bash
node --version
npm --version
v24.16.0 11.13.0

Crie um diretório vazio e inicie o projeto. Depois marque o pacote como ESM:

bash
npm init -y
npm pkg set type=module

No package.json, a decisão fica visível:

json
{
  "type": "module"
}

Esse trecho é apenas a parte relevante; mantenha nome, versão, scripts e dependências criados pelo npm. Para revisar a função do arquivo, veja npm e package.json.

Instale CLI, Client, driver e adapter separadamente

Prisma CLI participa do desenvolvimento, então fica em devDependencies. Client, adapter e driver são usados pela aplicação em runtime:

bash
npm install @prisma/client@7.9.1 @prisma/adapter-pg@7.9.1 pg dotenv
npm install --save-dev prisma@7.9.1 typescript tsx @types/node @types/pg
npx prisma --version
prisma : 7.9.1 @prisma/client : 7.9.1 Node.js : v24.16.0 TypeScript : 7.0.2 Query Compiler : enabled

Fixar os dois pacotes Prisma na mesma versão torna o ambiente reproduzível. Em 22 de agosto de 2026, 7.9.1 é GA e está no canal latest; Prisma 8 aparece no canal next como RC. Não troque o número deste tutorial por @next num projeto que precisa de estabilidade.

Deixe o init criar a estrutura da versão atual

Use o provider PostgreSQL, escolha o output e mantenha esta prática focada sem instalar arquivos de skills do CLI:

bash
npx prisma init \
  --datasource-provider postgresql \
  --output ../src/generated/prisma \
  --no-skills
Initialized Prisma in your project

prisma/ schema.prisma prisma.config.ts .env .gitignore

O comando cria duas fontes diferentes. schema.prisma descreve modelos e o provider. prisma.config.ts configura a CLI. Essa separação é parte do Prisma 7; uma URL copiada para datasource db vem de material antigo.

Configure generator e datasource

Abra prisma/schema.prisma e deixe a base assim:

text
generator client {
  provider     = "prisma-client"
  output       = "../src/generated/prisma"
  moduleFormat = "esm"
}

datasource db {
  provider = "postgresql"
}

O provider do generator é prisma-client, não prisma-client-js. O output é obrigatório no Prisma 7 e aponta para código gerado que sua aplicação importará. datasource db informa qual dialeto e conjunto de tipos o schema usa; a URL fica na configuração abaixo.

ts
import "dotenv/config";
import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  datasource: {
    url: env("DATABASE_URL"),
  },
});

O nome técnico é Prisma Config. Em palavras simples, ele diz à CLI onde estão schema, histórico de migration e conexão. env falha cedo quando a URL não existe, em vez de entregar undefined a um comando que mudará o banco.

Suba um PostgreSQL que possa ser descartado

O container abaixo usa nome específico, banco e senha apenas locais:

bash
docker run -d --name prisma-postgres-local \
  -e POSTGRES_USER=devclub \
  -e POSTGRES_PASSWORD=devclub_test_only \
  -e POSTGRES_DB=livraria_prisma \
  -p 5432:5432 \
  postgres:18-alpine

Coloque a conexão no .env e não envie senhas reais ao Git:

bash
DATABASE_URL="postgresql://devclub:devclub_test_only@localhost:5432/livraria_prisma?schema=public"

Confirme o servidor, não apenas a tag da imagem:

bash
docker exec prisma-postgres-local \
  psql -U devclub -d livraria_prisma -Atc 'SHOW server_version;'
18.6

Se a porta 5432 estiver ocupada, publique outra porta do host e atualize a URL. Isso muda o endereço externo, não a porta 5432 dentro do container.

Crie um modelo pequeno e valide

Acrescente Livro ao schema:

text
model Livro {
  id      Int    @id @default(autoincrement())
  titulo  String
  slug    String @unique
  estoque Int    @default(0)

  @@map("livros")
}

Rode validação, migration e geração como etapas explícitas:

bash
npx prisma validate
npx prisma migrate dev --name inicial
npx prisma generate
The schema at prisma/schema.prisma is valid 🚀

Applying migration 20260823014937_inicial Your database is now in sync with your schema.

✔ Generated Prisma Client (7.9.1) to ./src/generated/prisma in 11ms

O timestamp da sua pasta será diferente. Abra o migration.sql e confirme que há CREATE TABLE "livros" e índice único para slug. generate vem depois porque o Prisma 7 não o dispara automaticamente em migrate dev.

Conecte o Client pelo adapter

Crie src/prisma.ts:

ts
import "dotenv/config";
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "./generated/prisma/client.js";

const connectionString = process.env.DATABASE_URL;

if (!connectionString) {
  throw new Error("DATABASE_URL não foi definida");
}

const adapter = new PrismaPg({ connectionString });
export const prisma = new PrismaClient({ adapter });

Crie src/index.ts para gravar e ler:

ts
import { prisma } from "./prisma.js";

const livro = await prisma.livro.create({
  data: { titulo: "Olhos d'água", slug: "olhos-dagua", estoque: 8 },
});

console.log({ titulo: livro.titulo, estoque: livro.estoque });
await prisma.$disconnect();
bash
npx tsx src/index.ts
{ titulo: "Olhos d'água", estoque: 8 }

O registro veio do PostgreSQL. O tipo de livro foi gerado a partir do modelo e o adapter abriu a conversa pelo driver pg. Em servidor web, compartilhe uma instância adequada ao ciclo de vida do processo em vez de conectar e desconectar a cada requisição.

Reproduza o erro que denuncia tutorial antigo

Retire o adapter e tente construir apenas o Client:

ts
import { PrismaClient } from "./generated/prisma/client.js";

new PrismaClient();

O TypeScript já mostra TS2554: Expected 1 arguments, but got 0. Executado sem checagem, o mesmo problema aparece no runtime:

PrismaClientInitializationError: PrismaClient was instantiated without any options. A driver adapter is required to connect to your database.

Não resolva instalando aleatoriamente outra versão. Volte à arquitetura: importe PrismaPg, crie o adapter com connectionString e passe { adapter }. Esse padrão identifica a diferença entre Prisma 6 e 7.

Missão: reinstale sem consultar o bloco pronto

Num segundo diretório, crie o projeto a partir de quatro pistas: ESM no package.json, URL em prisma.config.ts, generator prisma-client com output e PrismaClient com adapter. Modele Categoria com id e nome @unique, migre, gere e crie uma categoria.

Seu critério de sucesso tem cinco provas: prisma --version mostra 7.9.1; prisma validate passa; a pasta gerada está em src; PostgreSQL responde 18.6; e retirar { adapter } reproduz o erro acima. Ao terminar, remova apenas o container desta prática:

bash
docker rm -f prisma-postgres-local

Com a conexão compreendida, avance para schema e modelos no Prisma e transforme os campos em constraints e tipos de verdade.

  • prisma 7
  • instalar prisma
  • postgresql
  • adapter pg
  • prisma config
  • node.js

Perguntas frequentes

Por que Prisma 7 exige um driver adapter?
O Client atual usa o driver JavaScript do banco em runtime. Para PostgreSQL, @prisma/adapter-pg traduz as operações do Prisma para o driver pg e administra essa conexão.
Onde fica DATABASE_URL no Prisma 7?
A CLI lê a URL pela seção datasource de prisma.config.ts. O bloco datasource do schema.prisma declara o provider, sem repetir a URL.
Preciso instalar Prisma globalmente?
Não. Instale prisma em devDependencies e execute com npx ou scripts npm. Assim a versão fica registrada no projeto e é igual para equipe e CI.
Posso usar CommonJS no Prisma 7?
O fluxo recomendado do gerador prisma-client usa ESM. Este projeto define type module no package.json e importa o Client gerado com resolução NodeNext.

Dúvidas e comentários

Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.

Todo o código deste artigo foi executado em Node 24.16.0, Prisma ORM 7.9.1, @prisma/adapter-pg 7.9.1, PostgreSQL 18.6 em postgres:18-alpine e Docker 29.5.3, e as saídas exibidas são as reais — como produzimos este conteúdo.

Fontes consultadas

  1. Prisma Client — introdução e instalação — prisma.io
  2. Prisma Client — geração e output — prisma.io
  3. Prisma ORM — driver adapters — prisma.io
  4. Prisma ORM — PostgreSQL connector — prisma.io

Continue por aqui