import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';import * as schema from './schema';// Using Pool (recommended for multiple connections)const pool = new Pool({ host: 'localhost', port: 5432, user: 'postgres', password: 'password', database: 'mydb',});export const db = drizzle({ client: pool, schema });
3
Use connection string
// Alternative: using connection stringconst pool = new Pool({ connectionString: process.env.DATABASE_URL,});export const db = drizzle({ client: pool, schema });// Or even simplerexport const db = drizzle(process.env.DATABASE_URL, { schema });
import { drizzle } from 'drizzle-orm/postgres-js';import postgres from 'postgres';import * as schema from './schema';const client = postgres(process.env.DATABASE_URL!);export const db = drizzle({ client, schema });
import { drizzle } from 'drizzle-orm/neon-serverless';import { Pool } from '@neondatabase/serverless';import * as schema from './schema';const pool = new Pool({ connectionString: process.env.DATABASE_URL });export const db = drizzle({ client: pool, schema });
import { drizzle } from 'drizzle-orm/vercel-postgres';import { sql } from '@vercel/postgres';import * as schema from './schema';export const db = drizzle({ client: sql, schema });
import { drizzle } from 'drizzle-orm/planetscale-serverless';import { Client } from '@planetscale/database';import * as schema from './schema';const client = new Client({ url: process.env.DATABASE_URL,});export const db = drizzle({ client, schema });
import { drizzle } from 'drizzle-orm/better-sqlite3';import Database from 'better-sqlite3';import * as schema from './schema';const sqlite = new Database('sqlite.db');export const db = drizzle({ client: sqlite, schema });
import { drizzle } from 'drizzle-orm/bun-sqlite';import { Database } from 'bun:sqlite';import * as schema from './schema';const sqlite = new Database('sqlite.db');export const db = drizzle({ client: sqlite, schema });
Providing your schema enables the relational query API:
import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';import * as schema from './schema';const pool = new Pool({ connectionString: process.env.DATABASE_URL });// With schema - enables db.query APIexport const db = drizzle({ client: pool, schema });// Without schema - only db.select(), db.insert(), etc.export const dbNoSchema = drizzle(pool);
import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';const pool = new Pool({ connectionString: process.env.DATABASE_URL });// Convert camelCase to snake_caseexport const db = drizzle({ client: pool, casing: 'snake_case',});
import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';import * as schema from './schema';let db: ReturnType<typeof drizzle>;if (!global.db) { const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 20, }); global.db = drizzle({ client: pool, schema });}db = global.db;export { db };
import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';import * as schema from './schema';const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 20, // Maximum pool size idleTimeoutMillis: 30000, // Close idle connections after 30s connectionTimeoutMillis: 2000, // Return error after 2s if connection not available});export const db = drizzle({ client: pool, schema });// Graceful shutdownprocess.on('SIGTERM', async () => { await pool.end();});
import { drizzle } from 'drizzle-orm/node-postgres';if (!process.env.DATABASE_URL) { throw new Error('DATABASE_URL is not set');}export const db = drizzle(process.env.DATABASE_URL);
import { drizzle } from 'drizzle-orm/node-postgres';import { Pool } from 'pg';import * as schema from './schema';const pool = new Pool({ connectionString: process.env.DATABASE_URL });// Type is inferred from schemaexport const db = drizzle({ client: pool, schema });// Access the client if neededconst client = db.$client; // Type: Pool