Guia completo: Prisma com PostgreSQL em projetos Node.js

Rocketseat

Rocketseat

4 min de leitura
node
Fala, Dev! 🚀 Tudo bem por aí? Preparados para levar seus projetos Node.js para o próximo nível? Hoje, a gente vai mergulhar de cabeça em uma combinação poderosa que tem transformado o desenvolvimento backend: Prisma e PostgreSQL. Se você busca produtividade, segurança de tipos e uma experiência de desenvolvimento fluida, este guia é para você. Vamos juntos desvendar como integrar essas ferramentas e construir aplicações robustas e escaláveis.

A dupla dinâmica do backend

No desenvolvimento web, a escolha de um bom ORM e de um banco de dados eficiente é determinante. É aqui que o Prisma e o PostgreSQL entram em cena. O Prisma é uma ferramenta de banco de dados de próxima geração que simplifica a interação com seu banco, trazendo segurança de tipos e uma experiência de desenvolvimento incrível. Já o PostgreSQL é um dos bancos de dados relacionais mais avançados e confiáveis do mercado, ideal para quem busca robustez e escalabilidade.
Nosso objetivo é te guiar, do setup à produção. Bora codar e construir o futuro do seu backend!

Entendendo o ecossistema: Prisma e PostgreSQL

Vamos conhecer melhor cada um desses protagonistas.

O que é Prisma?

O Prisma é um ORM de nova geração que oferece:
  • Prisma Client: um gerador de cliente de banco de dados type-safe para Node.js e TypeScript, para interagir com seu banco de forma intuitiva e segura.
  • Prisma Migrate: ferramenta para gerenciar migrações de schema, garantindo alterações controladas e versionadas.
  • Prisma Studio: interface gráfica para visualizar e gerenciar os dados do seu banco.

Vantagens do Prisma:

  • Type-safety: autocompletar e verificação de tipos com TypeScript, eliminando erros comuns.
  • Produtividade: a API intuitiva e o foco em convenções reduzem o código boilerplate.
  • Abstração de banco de dados: permite trocar o banco (SQLite para PostgreSQL, etc.) com poucas alterações, como demonstrado no vídeo de referência.
  • Migrations declarativas: defina seu schema e o Prisma gera as migrações SQL.

O que é PostgreSQL?

O PostgreSQL, ou Postgres, é um sistema de gerenciamento de banco de dados objeto-relacional (ORDBMS) gratuito e de código aberto, conhecido por sua robustez, confiabilidade e desempenho. É uma escolha popular para aplicações de grande escala.
Características principais do PostgreSQL:
  • Conformidade ACID: garante a integridade dos dados.
  • Extensibilidade: permite criar funções e tipos de dados personalizados.
  • Suporte a JSONB: tipo de dado JSON binário eficiente.
  • Comunidade ativa: vasta comunidade que contribui para seu aprimoramento.

Por que essa combinação é poderosa?

A sinergia entre Prisma e PostgreSQL é inegável. O Prisma aproveita a robustez do PostgreSQL, enquanto o PostgreSQL se beneficia da abstração e segurança de tipos do Prisma. Juntos, proporcionam uma experiência de desenvolvimento eficiente, segura e escalável para suas aplicações Node.js.

Configurando seu ambiente de desenvolvimento

Para começar, você precisará de:
  • Node.js: versão LTS (recomendado 18.x ou 20.x).
  • npm ou Yarn: gerenciadores de pacotes.
  • Docker e Docker Compose: recomendados para configurar o PostgreSQL localmente.

Configurando PostgreSQL com Docker

Usar Docker para o PostgreSQL é uma prática excelente. Crie um docker-compose.yml:
version: '3.8' services: db: image: postgres:15 # Versão estável recomendada restart: always environment: POSTGRES_USER: docker POSTGRES_PASSWORD: docker POSTGRES_DB: myapp ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:
Inicie o container:
docker-compose up -d
Isso iniciará um PostgreSQL na porta 5432 com user: docker, password: docker e banco myapp.

Inicializando um projeto Node.js

Crie um novo projeto Node.js e instale as dependências:
mkdir my-prisma-app cd my-prisma-app npm init -y npm install express prisma @prisma/client npm install -D typescript ts-node @types/node
Configure o TypeScript com um tsconfig.json mais robusto:
{ "compilerOptions": { "target": "es2021", "module": "commonjs", "rootDir": "./src", "outDir": "./dist", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "sourceMap": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] }

Integrando Prisma ao seu projeto Node.js

Com o ambiente pronto, vamos integrar o Prisma.

Instalação e inicialização do Prisma

Execute:
npx prisma init
Este comando cria a pasta prisma com schema.prisma e o arquivo .env. No .env, configure DATABASE_URL:
DATABASE_URL="postgresql://docker:docker@localhost:5432/myapp?schema=public"
No schema.prisma, verifique se o provider é postgresql:
datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" }

Definindo seu Schema (Models)

Defina a estrutura do banco usando a linguagem de schema do Prisma. Exemplo com User e Post:
model User { id String @id @default(cuid()) // Melhor prática atual para IDs email String @unique name String? posts Post[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Post { id String @id @default(cuid()) // Melhor prática atual para IDs title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@map("posts") // Mapeia o nome da tabela para 'posts' }
Usamos @id, @default(cuid()) (melhor prática atual para IDs), @unique, ? (opcional), @relation e @@map para convenções.

Migrações com Prisma Migrate

Sincronize seu banco de dados com o schema definido.

O que são migrações?

Migrações são o histórico das alterações na estrutura do seu banco, permitindo evoluir o schema de forma controlada.

Criando sua primeira migração

Execute para criar e aplicar a migração:
npx prisma migrate dev --name init
O Prisma gera os arquivos SQL em prisma/migrations e os aplica. Para produção, use npx prisma migrate deploy.

Interagindo com o banco de dados usando Prisma Client

Com o banco configurado, use o Prisma Client para interagir com os dados.

Gerando o Prisma Client

npx prisma migrate dev já gera o Client. Se precisar, use npx prisma generate.

Operações CRUD básicas

Exemplo em src/index.ts para operações CRUD:
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { // CREATE const user = await prisma.user.create({ data: { email: 'Isabela@rkct.team', name: 'Isabela', posts: { create: { title: 'Olá mundo!', content: 'Esse é meu primeiro post!', published: true, }, }, }, }); console.log('Usuário criado:', user); // READ const allUsers = await prisma.user.findMany({ include: { posts: true } }); console.log('\nTodos os usuários e seus posts:'); console.log(JSON.stringify(allUsers, null, 2)); // UPDATE const updatedUser = await prisma.user.update({ where: { email: 'Isabela@rkct.team' }, data: { name: 'Isabela Castilho' }, }); console.log('\nUsuário atualizado:', updatedUser); // DELETE const deletedPost = await prisma.post.delete({ where: { id: user.posts[0].id }, }); console.log('\nPost deletado:', deletedPost); } main() .catch(e => { console.error(e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });
Execute:
tsc node dist/index.js
O Prisma Client torna a interação com o banco de dados mágica, com segurança de tipos e uma API expressiva.

Explorando seus dados com Prisma Studio

Para visualizar e gerenciar seus dados de forma interativa, use o Prisma Studio.

O que é Prisma Studio?

É uma interface gráfica web para navegar, filtrar, editar e criar registros no seu banco de dados, útil para depuração.

Iniciando o Studio

Execute:
npx prisma studio
Isso abrirá o Prisma Studio no seu navegador, conectado ao seu banco de dados. Uma mão na roda para o desenvolvimento!

Dicas para produção

Levar uma aplicação para produção exige atenção a alguns detalhes. Aqui estão algumas boas práticas e considerações importantes:
  • Variáveis de ambiente: nunca exponha credenciais de banco de dados diretamente no código. Use variáveis de ambiente (como DATABASE_URL no .env) e garanta que elas sejam gerenciadas de forma segura em produção, utilizando serviços como AWS Secrets Manager ou HashiCorp Vault.
  • Migrações em produção: para aplicar migrações em ambientes de produção, utilize sempre npx prisma migrate deploy. Este comando é otimizado para ambientes de produção, garantindo que as migrações sejam aplicadas de forma segura e idempotente. Nunca use npx prisma migrate dev em produção, pois ele pode realizar operações destrutivas e não é projetado para esse ambiente.
  • Pool de conexões: o Prisma Client gerencia automaticamente um pool de conexões, otimizando o uso de recursos. Em ambientes de alta carga, monitore o uso de conexões e ajuste as configurações do pool no seu schema.prisma ou na inicialização do PrismaClient se necessário, para evitar sobrecarga no banco de dados.
  • Performance: otimize suas queries usando select para buscar apenas os campos necessários, e include para carregar relacionamentos de forma eficiente. Utilize ferramentas de monitoramento do PostgreSQL (como pg_stat_statements) para identificar e otimizar queries lentas. Considere índices adequados para suas tabelas.
  • Segurança: o Prisma, por ser um ORM, protege automaticamente contra ataques de SQL Injection, pois parametriza todas as queries. No entanto, sempre valide e sanitize as entradas do usuário na sua aplicação para prevenir outras vulnerabilidades, como XSS (Cross-Site Scripting).
  • Estratégias de backup e rollback: implemente rotinas de backup regulares para seu banco de dados PostgreSQL. Em caso de falha de uma migração ou implantação, tenha um plano de rollback bem definido, que pode incluir a restauração de um backup e a reversão do código da aplicação para uma versão anterior estável.
  • Testes: integre testes unitários e de integração robustos para garantir que suas interações com o banco de dados funcionem como esperado. Use um banco de dados de teste separado (ou um ambiente de teste efêmero com Docker) para evitar conflitos com dados de desenvolvimento ou produção.

Seu próximo nível com Prisma e PostgreSQL

Chegamos ao fim do nosso guia, Dev! Exploramos o poder do Prisma e do PostgreSQL em projetos Node.js. Essa combinação traz produtividade, segurança e escalabilidade.
O Prisma simplifica a complexidade do banco de dados, permitindo que você se concentre na lógica de negócio, enquanto o PostgreSQL oferece a fundação sólida e confiável. Juntos, são a receita para o sucesso no desenvolvimento backend.
Agora, o desafio é com você! Qual o seu próximo nível com Prisma e PostgreSQL? Compartilhe suas experiências e dúvidas em nossa comunidade.
Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.