Saltar al contenido principal

Drizzle y PostgreSQL

Instalaciones

bun add drizzle-orm pg
bun add -D drizzle-kit tsx @types/pg

Variable de entorno

.env
DATABASE_URL=

Conectar Drizzle a la base de datos

src/libs/config/database.ts
import { drizzle } from 'drizzle-orm/node-postgres';

export const db = drizzle(import.meta.env.DATABASE_URL!);

Esquemas

src/db/schema.ts
import { pgEnum, pgTable, uuid, varchar } from "drizzle-orm/pg-core";

export const userRoleEnum = pgEnum("user_role", ["user", "editor", "admin"]);

export const usersTable = pgTable("users", {
id: uuid().primaryKey(),
name: varchar({ length: 255 }).notNull(),
email: varchar({ length: 255 }).notNull().unique(),
password: varchar({ length: 255 }).notNull(),
role: userRoleEnum().default("user")
})

Archivo de configuración de Drizzle

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
out: './drizzle',
schema: './src/db/schema.ts', // One file
//schema: './src/db/schema', // Multiple files
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});

Aplicar cambios

Cambios rápidos

  • Útil en desarrollo
  • Para probar rápidamente nuevos esquemas o cambios
bunx drizzle-kit push

Con migraciones

# Generar migraciones
bunx drizzle-kit generate

# Aplicar migraciones
bunx drizzle-kit migrate

Consultas e inserciones en la base de datos

import { db } from "@/libs/config/database";
import type { APIRoute } from "astro";
import { usersTable } from "@/db/schema";

export const GET: APIRoute = async ({ params, request }) => {
const users = await db.select().from(usersTable);

return new Response(
JSON.stringify(users),
{
status: 200,
headers: {
"Content-Type": "application/json",
}
}
);
}