From 0ef123b7d7363564844e8fc9ab59c567c8779392 Mon Sep 17 00:00:00 2001 From: Russell Dunphy Date: Mon, 9 Feb 2026 08:22:45 +0000 Subject: [PATCH] Don't create extensions inside a transaction Extensions created inside a transaction don't make their objects (functions, types, etc.) available to subsequent statements in that transaction, which causes `db push` to fail when tables reference extension-provided defaults like `uuid_generate_v4()`. Move schema and extension creation before the transaction so their objects are available when tables are created. Closes #332 Co-Authored-By: Claude Opus 4.6 --- packages/orm-migrate/src/push.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/orm-migrate/src/push.ts b/packages/orm-migrate/src/push.ts index e2833f8..d28e261 100644 --- a/packages/orm-migrate/src/push.ts +++ b/packages/orm-migrate/src/push.ts @@ -13,21 +13,22 @@ export const push = async (db: Orm) => { ); console.log(`Pushing schemas ${toSentence(schemas)} to database`); - await db.transact(async (db) => { - for (const schema of schemas.values()) { - console.log(` - Creating schema "${schema}"`); - await db.query(createSchemaSql(schema)); + for (const schema of schemas.values()) { + console.log(` - Creating schema "${schema}"`); + await db.query(createSchemaSql(schema)); + } + for (const extension of db.config.extensions) { + console.log(` - Creating extension "${extension}"`); + for (const schema of schemas) { + await db.query(createExtensionsSql(schema, extension)); } - for (const extension of db.config.extensions) { - console.log(` - Creating extension "${extension}"`); - for (const schema of schemas) { - await db.query(createExtensionsSql(schema, extension)); - } - if (!schemas.has("public")) { - await db.query(createExtensionsSql("public", extension)); - } + if (!schemas.has("public")) { + await db.query(createExtensionsSql("public", extension)); } + } + + await db.transact(async (db) => { for (const model of Object.values(db.config.models)) { console.log(` - Creating table "${model.schema}"."${model.table}"`); await db.query(createTableSql(model));