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",
}
}
);
}