From a9f4698a29d172f13e9c4716393af464a6f9b644 Mon Sep 17 00:00:00 2001 From: Joep Peeters Date: Fri, 17 Feb 2023 10:15:19 +0100 Subject: [PATCH] set ownership if configured Signed-off-by: Joep Peeters --- .../src/database/connectors/postgres.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/backend-common/src/database/connectors/postgres.ts b/packages/backend-common/src/database/connectors/postgres.ts index c780fb829b..fccd8ac48e 100644 --- a/packages/backend-common/src/database/connectors/postgres.ts +++ b/packages/backend-common/src/database/connectors/postgres.ts @@ -35,6 +35,14 @@ export function createPgDatabaseClient( ) { const knexConfig = buildPgDatabaseConfig(dbConfig, overrides); const database = knexFactory(knexConfig); + + const owner = dbConfig.getOptionalString('setOwner') + + if (owner) { + database.client.pool.on('createSuccess', (_event: any, pgClient: any) => { + pgClient.query(`SET ROLE ${owner}`, () => { }); + }); + } return database; } @@ -147,10 +155,18 @@ export async function ensurePgSchemaExists( ...schemas: Array ): Promise { const admin = createPgDatabaseClient(dbConfig); + const setOwner = dbConfig.getOptionalString('setOwner'); try { const ensureSchema = async (database: string) => { - await admin.raw(`CREATE SCHEMA IF NOT EXISTS ??`, [database]); + if (setOwner) { + await admin.raw(`CREATE SCHEMA IF NOT EXISTS ?? AUTHORIZATION ??`, [ + database, + setOwner, + ]); + } else { + await admin.raw(`CREATE SCHEMA IF NOT EXISTS ??`, [database]); + } }; await Promise.all(schemas.map(ensureSchema));