Pular para o conteúdo

Prisma Postgres & Astro

Prisma Postgres é um banco de dados Postgres totalmente gerenciado e serverless construído para aplicativos web modernos.

O Prisma ORM é a forma recomendada de se conectar ao seu banco de dados Prisma Postgres. Ele oferece consultas com segurança de tipos (type-safe), migrações e desempenho global.

Execute os seguintes comandos para instalar as dependências necessárias do Prisma:

Janela do terminal
npm install prisma tsx --save-dev
npm install @prisma/adapter-pg @prisma/client

Uma vez instalado, inicialize o Prisma no seu projeto com o seguinte comando:

Janela do terminal
npx prisma init --db --output ./generated

Você precisará responder a algumas perguntas ao configurar seu banco de dados Prisma Postgres. Selecione a região mais próxima da sua localização e um nome memorável para o seu banco de dados, como “Meu Projeto Astro”.

Isso criará:

  • Um diretório prisma/ com um arquivo schema.prisma
  • Um arquivo .env com a variável DATABASE_URL já configurada

Mesmo se você não precisar de modelos de dados específicos ainda, o Prisma requer pelo menos um modelo no schema para gerar um cliente e aplicar migrações.

O exemplo a seguir define um modelo Postagem como modelo provisório. Adicione o modelo ao seu schema para começar. Você pode excluí-lo ou substituí-lo com segurança mais tarde por modelos que reflitam seus dados reais.

prisma/schema.prisma
generator client {
provider = "prisma-client"
output = "./generated"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Postagem {
id Int @id @default(autoincrement())
titulo String
conteudo String?
publicada Boolean @default(false)
}

Saiba mais sobre como configurar a sua instalação do Prisma ORM na referência do schema do Prisma.

Execute o seguinte comando para gerar o Prisma Client a partir do seu schema:

Janela do terminal
npx prisma generate

Execute o seguinte comando para criar as tabelas do banco de dados e gerar o Prisma Client a partir do seu schema. Isso também criará um diretório prisma/migrations/ com arquivos do histórico de migrações.

Janela do terminal
npx prisma migrate dev --name init

Dentro de /src/lib, crie um arquivo prisma.ts. Este arquivo inicializará e exportará a instância do seu Prisma Client para que você possa consultar seu banco de dados em todo o seu projeto Astro.

src/lib/prisma.ts
import { PrismaPg } from '@prisma/adapter-pg';
import { PrismaClient } from '../../prisma/generated/client';
const stringConexao = import.meta.env.DATABASE_URL;
const adaptador = new PrismaPg({ connectionString: stringConexao });
const prisma = new PrismaClient({ adapter: adaptador });
export default prisma;

O exemplo a seguir mostra a busca apenas das suas postagens publicadas com o Prisma Client ordenadas por id, e então exibindo os títulos e o conteúdo da postagem no seu modelo do Astro:

src/pages/postagens.astro
---
import prisma from '../lib/prisma';
const postagens = await prisma.post.findMany({
where: { publicado: true },
orderBy: { id: 'desc' }
});
---
<html>
<head>
<title>Postagens Publicadas</title>
</head>
<body>
<h1>Postagens Publicadas</h1>
<ul>
{postagens.map((post) => (
<li>
<h2>{post.titulo}</h2>
{post.conteudo && <p>{post.conteudo}</p>}
</li>
))}
</ul>
</body>
</html>

A melhor prática é lidar com consultas em uma rota de API. Para mais informações sobre como usar o Prisma ORM no seu projeto Astro, veja o Guia Astro + Prisma ORM.

Você pode se conectar ao Prisma Postgres via TCP direto usando qualquer outro ORM, biblioteca de banco de dados ou ferramenta de sua escolha. Crie uma string de conexão direta no seu Console Prisma para começar.

Este exemplo usa pg, um cliente PostgreSQL para Node.js para fazer uma conexão TCP direta.

Execute o seguinte comando para instalar o pacote pg:

Janela do terminal
npm install pg

Forneça sua string de conexão para o cliente pg para se comunicar com o seu servidor SQL e buscar dados do seu banco de dados.

O exemplo a seguir de criação de uma tabela e inserção de dados pode ser usado para validar sua URL de consulta e conexão TCP:

src/pages/index.astro
---
import { Client } from 'pg';
const client = new Client({
connectionString: import.meta.env.DATABASE_URL,
ssl: { rejectUnauthorized: false }
});
await client.connect();
await client.query(`
CREATE TABLE IF NOT EXISTS postagens (
id SERIAL PRIMARY KEY,
titulo TEXT UNIQUE,
conteudo TEXT
);
INSERT INTO postagens (titulo, conteudo)
VALUES ('Olá', 'Mundo')
ON CONFLICT (titulo) DO NOTHING;
`);
const { rows } = await client.query('SELECT * FROM postagens');
await client.end();
---
<h1>Postagens</h1>
<p>{rows[0].titulo}: {rows[0].conteudo}</p>

Mais guias de serviço de back-end

Contribua Comunidade Patrocine