import { migrate } from 'drizzle-orm/postgres-js/migrator'; import { fileURLToPath } from 'node:url'; import path from 'node:path'; import { getDb, getSql, closeDb } from './client.js'; /** * Runs SQL migrations from ./migrations. Extensions are created first (idempotent) because * drizzle-kit does not manage them; `vector` is optional and only enabled when available. */ export async function runMigrations(): Promise { const sql = getSql({ max: 1 }); await sql`CREATE EXTENSION IF NOT EXISTS pg_trgm`; await sql`CREATE EXTENSION IF NOT EXISTS unaccent`; const [vec] = await sql`SELECT 1 AS ok FROM pg_available_extensions WHERE name = 'vector'`; if (vec) await sql`CREATE EXTENSION IF NOT EXISTS vector`; else console.warn('[migrate] pgvector not available: embedding columns will fail — install pgvector'); const here = path.dirname(fileURLToPath(import.meta.url)); await migrate(getDb({ max: 1 }), { migrationsFolder: path.resolve(here, '../migrations') }); } const isMain = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url); if (isMain) { runMigrations() .then(async () => { console.log('[migrate] done'); await closeDb(); }) .catch(async (err) => { console.error('[migrate] failed', err); await closeDb(); process.exit(1); }); }