From 2e5371f3eed7dfe0f02db530cd98a148da46fa6e Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Thu, 11 Jun 2026 03:53:48 +0700 Subject: [PATCH] fix(discord-gateway): bypass Drizzle PG15 schema creation restrictions --- .../src/shared/database/migrate.ts | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/services/discord-gateway/src/shared/database/migrate.ts b/services/discord-gateway/src/shared/database/migrate.ts index 0e03903..f2df1c2 100644 --- a/services/discord-gateway/src/shared/database/migrate.ts +++ b/services/discord-gateway/src/shared/database/migrate.ts @@ -137,10 +137,26 @@ export async function runMigrations(): Promise { // new (pending) migrations — it is idempotent after that. await seedDrizzleHistory(client); - await migratePostgres(db, { - migrationsFolder: "./drizzle/migrations", - migrationsSchema: "public", - }); + // Monkey-patch client.query to intercept and ignore Drizzle's + // hardcoded schema creation, which fails in PG15+ restricted public schemas. + const originalQuery = client.query; + client.query = (async (...args: any[]) => { + const queryText = args[0]; + const text = typeof queryText === "string" ? queryText : queryText?.text; + if (text && typeof text === "string" && text.includes('CREATE SCHEMA IF NOT EXISTS "public"')) { + return { rows: [], command: "CREATE", rowCount: 0, oid: 0, fields: [] }; + } + return Function.prototype.apply.call(originalQuery, client, args); + }) as typeof client.query; + + try { + await migratePostgres(db, { + migrationsFolder: "./drizzle/migrations", + migrationsSchema: "public", + }); + } finally { + client.query = originalQuery; + } } finally { await client.query("SELECT pg_advisory_unlock($1, $2)", [ MIGRATION_LOCK_KEY_1,