Merge pull request #24577 from chap/chap/ensure-schema-exists-config

Add config prop `ensureSchemaExists`
This commit is contained in:
Patrik Oldsberg
2024-05-02 16:15:25 +02:00
committed by GitHub
3 changed files with 33 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Added config prop `ensureSchemaExists` to support postgres instances where user can create schemas but not databases.
+14
View File
@@ -111,6 +111,13 @@ export interface Config {
* Defaults to true if unspecified.
*/
ensureExists?: boolean;
/**
* Whether to ensure the given database schema exists by creating it if it does not.
* Defaults to false if unspecified.
*
* NOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema
*/
ensureSchemaExists?: boolean;
/**
* How plugins databases are managed/divided in the provided database instance.
*
@@ -147,6 +154,13 @@ export interface Config {
* Defaults to base config if unspecified.
*/
ensureExists?: boolean;
/**
* Whether to ensure the given database schema exists by creating it if it does not.
* Defaults to false if unspecified.
*
* NOTE: Currently only supported by the `pg` client when pluginDivisionMode: schema
*/
ensureSchemaExists?: boolean;
/**
* Arbitrary config object to pass to knex when initializing
* (https://knexjs.org/#Installation-client). Most notable is the
@@ -321,7 +321,10 @@ export class PgConnector implements Connector {
let schemaOverrides;
if (this.getPluginDivisionModeConfig() === 'schema') {
schemaOverrides = this.getSchemaOverrides(pluginId);
if (this.getEnsureExistsConfig(pluginId)) {
if (
this.getEnsureSchemaExistsConfig(pluginId) ||
this.getEnsureExistsConfig(pluginId)
) {
try {
await pgConnector.ensureSchemaExists!(pluginConfig, pluginId);
} catch (error) {
@@ -437,6 +440,16 @@ export class PgConnector implements Connector {
);
}
private getEnsureSchemaExistsConfig(pluginId: string): boolean {
const baseConfig =
this.config.getOptionalBoolean('ensureSchemaExists') ?? false;
return (
this.config.getOptionalBoolean(
`${pluginPath(pluginId)}.getEnsureSchemaExistsConfig`,
) ?? baseConfig
);
}
private getPluginDivisionModeConfig(): string {
return this.config.getOptionalString('pluginDivisionMode') ?? 'database';
}