brackt/scripts/migrate.mjs
Chris Parsons 787b817fa7
Add PgBouncer connection pooling support for Vultr managed PostgreSQL (#271)
Disables prepared statements when PGBOUNCER=true (required for PgBouncer
transaction mode). Adds DATABASE_DIRECT_URL so migrations always use a
direct connection, bypassing the pool.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 17:15:18 -04:00

33 lines
1 KiB
JavaScript

import { drizzle } from "drizzle-orm/postgres-js";
import { migrate } from "drizzle-orm/postgres-js/migrator";
import postgres from "postgres";
import { fileURLToPath } from "url";
import path from "path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const migrationUrl = process.env.DATABASE_DIRECT_URL || process.env.DATABASE_URL;
if (!migrationUrl) {
console.error("ERROR: DATABASE_URL (or DATABASE_DIRECT_URL) is required");
process.exit(1);
}
console.log("Running database migrations...");
const client = postgres(migrationUrl, {
max: 1,
onnotice: () => {}, // suppress NOTICE messages (schema/table already exists, etc.)
});
try {
const db = drizzle(client);
await migrate(db, { migrationsFolder: path.resolve(__dirname, "../drizzle") });
console.log("Migrations completed successfully");
} catch (err) {
console.error("Migration failed:", err);
await client.end().catch(() => {});
process.exit(1);
}
await client.end().catch(() => {});
process.exit(0);