Skip to content

Drizzle

Tested with: drizzle-orm 0.44 · drizzle-kit 0.31 · pg 8.13 · mysql2 3.11 · @libsql/client 0.14

src/db.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 10, ssl: { rejectUnauthorized: true } });
export const db = drizzle(pool);
drizzle.config.ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "postgresql",
schema: "./src/schema.ts",
out: "./drizzle",
dbCredentials: { url: process.env.DIRECT_URL! }, // direct endpoint for migrations
});
shell
npx drizzle-kit generate # writes SQL to ./drizzle
npx drizzle-kit migrate # applies against dbCredentials (direct endpoint)

Run migrate from CI, a Kubernetes Job or the platform’s pre-deploy step. With the PostgreSQL pooled endpoint at runtime, no extra flags are needed: Drizzle does not cache prepared statements by default with node-postgres.