diff --git a/.changeset/purple-apricots-build.md b/.changeset/purple-apricots-build.md new file mode 100644 index 0000000000..aa4f2fa4b5 --- /dev/null +++ b/.changeset/purple-apricots-build.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +**BREAKING** The config prop `ensureExists` now applies to schema creation when `pluginDivisionMode` is set to `schema`. This means schemas will no longer be automatically created when `ensureExists` is set to `false`. In this case the `pg` database as well as each `schema` must be created out of band. diff --git a/packages/backend-common/src/database/DatabaseManager.test.ts b/packages/backend-common/src/database/DatabaseManager.test.ts index ea8aca38ea..9e8af44fc0 100644 --- a/packages/backend-common/src/database/DatabaseManager.test.ts +++ b/packages/backend-common/src/database/DatabaseManager.test.ts @@ -612,6 +612,31 @@ describe('DatabaseManager', () => { ); }); + it('ensureExists does not create database or schema when false', async () => { + const testManager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { + client: 'pg', + pluginDivisionMode: 'schema', + ensureExists: false, + connection: { + host: 'localhost', + user: 'foo', + password: 'bar', + database: 'foodb', + }, + }, + }, + }), + ); + const pluginId = 'testdbname'; + await testManager.forPlugin(pluginId).getClient(); + + expect(mocked(ensureDatabaseExists)).toHaveBeenCalledTimes(0); + expect(mocked(ensureSchemaExists)).toHaveBeenCalledTimes(0); + }); + it('fetches and merges additional knex config', async () => { const testManager = DatabaseManager.fromConfig( new ConfigReader({ diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index 004e7d13cd..39ff864f8c 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -321,13 +321,15 @@ export class DatabaseManager { let schemaOverrides; if (this.getPluginDivisionModeConfig() === 'schema') { - try { - schemaOverrides = this.getSchemaOverrides(pluginId); - await ensureSchemaExists(pluginConfig, pluginId); - } catch (error) { - throw new Error( - `Failed to connect to the database to make sure that schema for plugin '${pluginId}' exists, ${error}`, - ); + schemaOverrides = this.getSchemaOverrides(pluginId); + if (this.getEnsureExistsConfig(pluginId)) { + try { + await ensureSchemaExists(pluginConfig, pluginId); + } catch (error) { + throw new Error( + `Failed to connect to the database to make sure that schema for plugin '${pluginId}' exists, ${error}`, + ); + } } }