Drizzle
Tested with: drizzle-orm 0.44 · drizzle-kit 0.31 · pg 8.13 · mysql2 3.11 · @libsql/client 0.14
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);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});import { readFileSync } from "node:fs";import { drizzle } from "drizzle-orm/mysql2";import mysql from "mysql2/promise";
const pool = mysql.createPool({ uri: process.env.DATABASE_URL, ssl: { ca: readFileSync("databasezy-ca.pem", "utf8"), rejectUnauthorized: true }, connectionLimit: 10,});export const db = drizzle(pool);import { defineConfig } from "drizzle-kit";
export default defineConfig({ dialect: "mysql", schema: "./src/schema.ts", out: "./drizzle", dbCredentials: { url: process.env.DATABASE_URL!, ssl: { ca: process.env.ZB_CA_PEM } },});import { createClient } from "@libsql/client";import { drizzle } from "drizzle-orm/libsql";
const client = createClient({ url: process.env.LIBSQL_URL!, authToken: process.env.ZB_TOKEN });export const db = drizzle(client);import { defineConfig } from "drizzle-kit";
export default defineConfig({ dialect: "turso", // libSQL remote schema: "./src/schema.ts", out: "./drizzle", dbCredentials: { url: process.env.LIBSQL_URL!, authToken: process.env.ZB_TOKEN! },});Migrations
Section titled “Migrations”npx drizzle-kit generate # writes SQL to ./drizzlenpx 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.