diff --git a/packages/cli/src/Db.ts b/packages/cli/src/Db.ts index 0bb52e1205..1c129657e5 100644 --- a/packages/cli/src/Db.ts +++ b/packages/cli/src/Db.ts @@ -127,6 +127,16 @@ export async function init( connection = new Connection(connectionOptions); await connection.initialize(); + if (dbType === 'postgresdb') { + const schema = config.getEnv('database.postgresdb.schema'); + const searchPath = ['public']; + if (schema !== 'public') { + await connection.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`); + searchPath.unshift(schema); + } + await connection.query(`SET search_path TO ${searchPath.join(',')};`); + } + if (!testConnectionOptions && dbType === 'sqlite') { // This specific migration changes database metadata. // A field is now nullable. We need to reconnect so that @@ -143,7 +153,7 @@ export async function init( // If you remove this call, remember to turn back on the // setting to run migrations automatically above. - await connection.runMigrations(); + await connection.runMigrations({ transaction: 'each' }); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (migrations.length === 0) { @@ -151,17 +161,15 @@ export async function init( connection = new Connection(connectionOptions); await connection.initialize(); } + } else { + await connection.runMigrations({ transaction: 'each' }); } - // @ts-ignore collections.Credentials = linkRepository(entities.CredentialsEntity); - // @ts-ignore collections.Execution = linkRepository(entities.ExecutionEntity); collections.Workflow = linkRepository(entities.WorkflowEntity); - // @ts-ignore collections.Webhook = linkRepository(entities.WebhookEntity); collections.Tag = linkRepository(entities.TagEntity); - collections.Role = linkRepository(entities.Role); collections.User = linkRepository(entities.User); collections.SharedCredentials = linkRepository(entities.SharedCredentials); @@ -170,7 +178,6 @@ export async function init( collections.InstalledPackages = linkRepository(entities.InstalledPackages); collections.InstalledNodes = linkRepository(entities.InstalledNodes); collections.WorkflowStatistics = linkRepository(entities.WorkflowStatistics); - collections.EventDestinations = linkRepository(entities.EventDestinations); isInitialized = true; diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts index 1c47c39e6a..5abe056769 100644 --- a/packages/cli/src/commands/start.ts +++ b/packages/cli/src/commands/start.ts @@ -239,7 +239,7 @@ export class Start extends Command { try { // Start directly with the init of the database to improve startup time - const startDbInitPromise = Db.init().catch(async (error: Error) => + await Db.init().catch(async (error: Error) => exitWithCrash('There was an error initializing DB', error), ); @@ -281,9 +281,6 @@ export class Start extends Command { await loadNodesAndCredentials.generateTypesForFrontend(); - // Wait till the database is ready - await startDbInitPromise; - const installedPackages = await getAllInstalledPackages(); const missingPackages = new Set<{ packageName: string; diff --git a/packages/cli/src/databases/config.ts b/packages/cli/src/databases/config.ts index 17de6bc65e..8708721870 100644 --- a/packages/cli/src/databases/config.ts +++ b/packages/cli/src/databases/config.ts @@ -36,7 +36,7 @@ const getDBConnectionOptions = (dbType: DatabaseType) => { return { entityPrefix, entities: Object.values(entities), - migrationsRun: true, + migrationsRun: false, migrationsTableName: `${entityPrefix}migrations`, cli: { entitiesDir, migrationsDir }, ...connectionDetails, @@ -54,7 +54,6 @@ export const getOptionOverrides = async (dbType: 'postgresdb' | 'mysqldb') => ({ export const getSqliteConnectionOptions = (): SqliteConnectionOptions => ({ type: 'sqlite', ...getDBConnectionOptions('sqlite'), - migrationsRun: false, // sqlite migrations are manually run in `Db.ts` migrations: sqliteMigrations, }); diff --git a/packages/cli/src/databases/migrations/postgresdb/1587669153312-InitialMigration.ts b/packages/cli/src/databases/migrations/postgresdb/1587669153312-InitialMigration.ts index 5f66c8538f..e1607a7732 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1587669153312-InitialMigration.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1587669153312-InitialMigration.ts @@ -1,62 +1,41 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; - -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class InitialMigration1587669153312 implements MigrationInterface { name = 'InitialMigration1587669153312'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixIndex = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); await queryRunner.query( - `CREATE TABLE IF NOT EXISTS ${tablePrefix}credentials_entity ("id" SERIAL NOT NULL, "name" character varying(128) NOT NULL, "data" text NOT NULL, "type" character varying(32) NOT NULL, "nodesAccess" json NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, CONSTRAINT PK_${tablePrefixIndex}814c3d3c36e8a27fa8edb761b0e PRIMARY KEY ("id"))`, + `CREATE TABLE IF NOT EXISTS ${tablePrefix}credentials_entity ("id" SERIAL NOT NULL, "name" character varying(128) NOT NULL, "data" text NOT NULL, "type" character varying(32) NOT NULL, "nodesAccess" json NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, CONSTRAINT PK_${tablePrefix}814c3d3c36e8a27fa8edb761b0e PRIMARY KEY ("id"))`, undefined, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS IDX_${tablePrefixIndex}07fde106c0b471d8cc80a64fc8 ON ${tablePrefix}credentials_entity (type) `, + `CREATE INDEX IF NOT EXISTS IDX_${tablePrefix}07fde106c0b471d8cc80a64fc8 ON ${tablePrefix}credentials_entity (type) `, undefined, ); await queryRunner.query( - `CREATE TABLE IF NOT EXISTS ${tablePrefix}execution_entity ("id" SERIAL NOT NULL, "data" text NOT NULL, "finished" boolean NOT NULL, "mode" character varying NOT NULL, "retryOf" character varying, "retrySuccessId" character varying, "startedAt" TIMESTAMP NOT NULL, "stoppedAt" TIMESTAMP NOT NULL, "workflowData" json NOT NULL, "workflowId" character varying, CONSTRAINT PK_${tablePrefixIndex}e3e63bbf986767844bbe1166d4e PRIMARY KEY ("id"))`, + `CREATE TABLE IF NOT EXISTS ${tablePrefix}execution_entity ("id" SERIAL NOT NULL, "data" text NOT NULL, "finished" boolean NOT NULL, "mode" character varying NOT NULL, "retryOf" character varying, "retrySuccessId" character varying, "startedAt" TIMESTAMP NOT NULL, "stoppedAt" TIMESTAMP NOT NULL, "workflowData" json NOT NULL, "workflowId" character varying, CONSTRAINT PK_${tablePrefix}e3e63bbf986767844bbe1166d4e PRIMARY KEY ("id"))`, undefined, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS IDX_${tablePrefixIndex}c4d999a5e90784e8caccf5589d ON ${tablePrefix}execution_entity ("workflowId") `, + `CREATE INDEX IF NOT EXISTS IDX_${tablePrefix}c4d999a5e90784e8caccf5589d ON ${tablePrefix}execution_entity ("workflowId") `, undefined, ); await queryRunner.query( - `CREATE TABLE IF NOT EXISTS ${tablePrefix}workflow_entity ("id" SERIAL NOT NULL, "name" character varying(128) NOT NULL, "active" boolean NOT NULL, "nodes" json NOT NULL, "connections" json NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, "settings" json, "staticData" json, CONSTRAINT PK_${tablePrefixIndex}eded7d72664448da7745d551207 PRIMARY KEY ("id"))`, + `CREATE TABLE IF NOT EXISTS ${tablePrefix}workflow_entity ("id" SERIAL NOT NULL, "name" character varying(128) NOT NULL, "active" boolean NOT NULL, "nodes" json NOT NULL, "connections" json NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, "settings" json, "staticData" json, CONSTRAINT PK_${tablePrefix}eded7d72664448da7745d551207 PRIMARY KEY ("id"))`, undefined, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixIndex = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + let tablePrefix = getTablePrefix(); await queryRunner.query(`DROP TABLE ${tablePrefix}workflow_entity`, undefined); - await queryRunner.query( - `DROP INDEX IDX_${tablePrefixIndex}c4d999a5e90784e8caccf5589d`, - undefined, - ); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}c4d999a5e90784e8caccf5589d`, undefined); await queryRunner.query(`DROP TABLE ${tablePrefix}execution_entity`, undefined); - await queryRunner.query( - `DROP INDEX IDX_${tablePrefixIndex}07fde106c0b471d8cc80a64fc8`, - undefined, - ); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}07fde106c0b471d8cc80a64fc8`, undefined); await queryRunner.query(`DROP TABLE ${tablePrefix}credentials_entity`, undefined); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1589476000887-WebhookModel.ts b/packages/cli/src/databases/migrations/postgresdb/1589476000887-WebhookModel.ts index 4226155ce8..6e91124b2e 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1589476000887-WebhookModel.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1589476000887-WebhookModel.ts @@ -1,33 +1,19 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; - -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class WebhookModel1589476000887 implements MigrationInterface { name = 'WebhookModel1589476000887'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixIndex = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query( - `CREATE TABLE IF NOT EXISTS ${tablePrefix}webhook_entity ("workflowId" integer NOT NULL, "webhookPath" character varying NOT NULL, "method" character varying NOT NULL, "node" character varying NOT NULL, CONSTRAINT "PK_${tablePrefixIndex}b21ace2e13596ccd87dc9bf4ea6" PRIMARY KEY ("webhookPath", "method"))`, + `CREATE TABLE IF NOT EXISTS ${tablePrefix}webhook_entity ("workflowId" integer NOT NULL, "webhookPath" character varying NOT NULL, "method" character varying NOT NULL, "node" character varying NOT NULL, CONSTRAINT "PK_${tablePrefix}b21ace2e13596ccd87dc9bf4ea6" PRIMARY KEY ("webhookPath", "method"))`, undefined, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); await queryRunner.query(`DROP TABLE ${tablePrefix}webhook_entity`, undefined); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1594828256133-CreateIndexStoppedAt.ts b/packages/cli/src/databases/migrations/postgresdb/1594828256133-CreateIndexStoppedAt.ts index 6bf370444c..3b6b795e60 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1594828256133-CreateIndexStoppedAt.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1594828256133-CreateIndexStoppedAt.ts @@ -1,34 +1,18 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; - -import config from '@/config'; +import { getTablePrefix } from '@/databases/utils/migrationHelpers'; export class CreateIndexStoppedAt1594828256133 implements MigrationInterface { name = 'CreateIndexStoppedAt1594828256133'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS IDX_${tablePrefixPure}33228da131bb1112247cf52a42 ON ${tablePrefix}execution_entity ("stoppedAt") `, + `CREATE INDEX IF NOT EXISTS IDX_${tablePrefix}33228da131bb1112247cf52a42 ON ${tablePrefix}execution_entity ("stoppedAt") `, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}33228da131bb1112247cf52a42`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}33228da131bb1112247cf52a42`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1607431743768-MakeStoppedAtNullable.ts b/packages/cli/src/databases/migrations/postgresdb/1607431743768-MakeStoppedAtNullable.ts index 316400eb5d..809f1de2e3 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1607431743768-MakeStoppedAtNullable.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1607431743768-MakeStoppedAtNullable.ts @@ -1,19 +1,11 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; - -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class MakeStoppedAtNullable1607431743768 implements MigrationInterface { name = 'MakeStoppedAtNullable1607431743768'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query( 'ALTER TABLE ' + tablePrefix + 'execution_entity ALTER COLUMN "stoppedAt" DROP NOT NULL', undefined, diff --git a/packages/cli/src/databases/migrations/postgresdb/1611144599516-AddWebhookId.ts b/packages/cli/src/databases/migrations/postgresdb/1611144599516-AddWebhookId.ts index b56b644853..71057557f7 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1611144599516-AddWebhookId.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1611144599516-AddWebhookId.ts @@ -1,38 +1,23 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class AddWebhookId1611144599516 implements MigrationInterface { name = 'AddWebhookId1611144599516'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query( `ALTER TABLE ${tablePrefix}webhook_entity ADD "webhookId" character varying`, ); await queryRunner.query(`ALTER TABLE ${tablePrefix}webhook_entity ADD "pathLength" integer`); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS IDX_${tablePrefixPure}16f4436789e804e3e1c9eeb240 ON ${tablePrefix}webhook_entity ("webhookId", "method", "pathLength") `, + `CREATE INDEX IF NOT EXISTS IDX_${tablePrefix}16f4436789e804e3e1c9eeb240 ON ${tablePrefix}webhook_entity ("webhookId", "method", "pathLength") `, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); - - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}16f4436789e804e3e1c9eeb240`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}16f4436789e804e3e1c9eeb240`); await queryRunner.query(`ALTER TABLE ${tablePrefix}webhook_entity DROP COLUMN "pathLength"`); await queryRunner.query(`ALTER TABLE ${tablePrefix}webhook_entity DROP COLUMN "webhookId"`); } diff --git a/packages/cli/src/databases/migrations/postgresdb/1617270242566-CreateTagEntity.ts b/packages/cli/src/databases/migrations/postgresdb/1617270242566-CreateTagEntity.ts index 339c90b337..acfda7410b 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1617270242566-CreateTagEntity.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1617270242566-CreateTagEntity.ts @@ -1,42 +1,35 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class CreateTagEntity1617270242566 implements MigrationInterface { name = 'CreateTagEntity1617270242566'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); // create tags table + relationship with workflow entity await queryRunner.query( - `CREATE TABLE ${tablePrefix}tag_entity ("id" SERIAL NOT NULL, "name" character varying(24) NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, CONSTRAINT "PK_${tablePrefixPure}7a50a9b74ae6855c0dcaee25052" PRIMARY KEY ("id"))`, + `CREATE TABLE ${tablePrefix}tag_entity ("id" SERIAL NOT NULL, "name" character varying(24) NOT NULL, "createdAt" TIMESTAMP NOT NULL, "updatedAt" TIMESTAMP NOT NULL, CONSTRAINT "PK_${tablePrefix}7a50a9b74ae6855c0dcaee25052" PRIMARY KEY ("id"))`, ); await queryRunner.query( - `CREATE UNIQUE INDEX IDX_${tablePrefixPure}812eb05f7451ca757fb98444ce ON ${tablePrefix}tag_entity ("name") `, + `CREATE UNIQUE INDEX IDX_${tablePrefix}812eb05f7451ca757fb98444ce ON ${tablePrefix}tag_entity ("name") `, ); await queryRunner.query( - `CREATE TABLE ${tablePrefix}workflows_tags ("workflowId" integer NOT NULL, "tagId" integer NOT NULL, CONSTRAINT "PK_${tablePrefixPure}a60448a90e51a114e95e2a125b3" PRIMARY KEY ("workflowId", "tagId"))`, + `CREATE TABLE ${tablePrefix}workflows_tags ("workflowId" integer NOT NULL, "tagId" integer NOT NULL, CONSTRAINT "PK_${tablePrefix}a60448a90e51a114e95e2a125b3" PRIMARY KEY ("workflowId", "tagId"))`, ); await queryRunner.query( - `CREATE INDEX IDX_${tablePrefixPure}31140eb41f019805b40d008744 ON ${tablePrefix}workflows_tags ("workflowId") `, + `CREATE INDEX IDX_${tablePrefix}31140eb41f019805b40d008744 ON ${tablePrefix}workflows_tags ("workflowId") `, ); await queryRunner.query( - `CREATE INDEX IDX_${tablePrefixPure}5e29bfe9e22c5d6567f509d4a4 ON ${tablePrefix}workflows_tags ("tagId") `, + `CREATE INDEX IDX_${tablePrefix}5e29bfe9e22c5d6567f509d4a4 ON ${tablePrefix}workflows_tags ("tagId") `, ); await queryRunner.query( - `ALTER TABLE ${tablePrefix}workflows_tags ADD CONSTRAINT "FK_${tablePrefixPure}31140eb41f019805b40d0087449" FOREIGN KEY ("workflowId") REFERENCES ${tablePrefix}workflow_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + `ALTER TABLE ${tablePrefix}workflows_tags ADD CONSTRAINT "FK_${tablePrefix}31140eb41f019805b40d0087449" FOREIGN KEY ("workflowId") REFERENCES ${tablePrefix}workflow_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION`, ); await queryRunner.query( - `ALTER TABLE ${tablePrefix}workflows_tags ADD CONSTRAINT "FK_${tablePrefixPure}5e29bfe9e22c5d6567f509d4a46" FOREIGN KEY ("tagId") REFERENCES ${tablePrefix}tag_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + `ALTER TABLE ${tablePrefix}workflows_tags ADD CONSTRAINT "FK_${tablePrefix}5e29bfe9e22c5d6567f509d4a46" FOREIGN KEY ("tagId") REFERENCES ${tablePrefix}tag_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION`, ); // set default dates for `createdAt` and `updatedAt` @@ -80,14 +73,7 @@ export class CreateTagEntity1617270242566 implements MigrationInterface { } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); // `createdAt` and `updatedAt` @@ -131,15 +117,15 @@ export class CreateTagEntity1617270242566 implements MigrationInterface { // tags await queryRunner.query( - `ALTER TABLE ${tablePrefix}workflows_tags DROP CONSTRAINT "FK_${tablePrefixPure}5e29bfe9e22c5d6567f509d4a46"`, + `ALTER TABLE ${tablePrefix}workflows_tags DROP CONSTRAINT "FK_${tablePrefix}5e29bfe9e22c5d6567f509d4a46"`, ); await queryRunner.query( - `ALTER TABLE ${tablePrefix}workflows_tags DROP CONSTRAINT "FK_${tablePrefixPure}31140eb41f019805b40d0087449"`, + `ALTER TABLE ${tablePrefix}workflows_tags DROP CONSTRAINT "FK_${tablePrefix}31140eb41f019805b40d0087449"`, ); - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}5e29bfe9e22c5d6567f509d4a4`); - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}31140eb41f019805b40d008744`); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}5e29bfe9e22c5d6567f509d4a4`); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}31140eb41f019805b40d008744`); await queryRunner.query(`DROP TABLE ${tablePrefix}workflows_tags`); - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}812eb05f7451ca757fb98444ce`); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}812eb05f7451ca757fb98444ce`); await queryRunner.query(`DROP TABLE ${tablePrefix}tag_entity`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1620824779533-UniqueWorkflowNames.ts b/packages/cli/src/databases/migrations/postgresdb/1620824779533-UniqueWorkflowNames.ts index 79c30e1f7d..54f22a8fef 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1620824779533-UniqueWorkflowNames.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1620824779533-UniqueWorkflowNames.ts @@ -1,18 +1,11 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class UniqueWorkflowNames1620824779533 implements MigrationInterface { name = 'UniqueWorkflowNames1620824779533'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); const workflowNames = await queryRunner.query(` SELECT name @@ -55,20 +48,12 @@ export class UniqueWorkflowNames1620824779533 implements MigrationInterface { } await queryRunner.query( - `CREATE UNIQUE INDEX "IDX_${tablePrefixPure}a252c527c4c89237221fe2c0ab" ON ${tablePrefix}workflow_entity ("name") `, + `CREATE UNIQUE INDEX "IDX_${tablePrefix}a252c527c4c89237221fe2c0ab" ON ${tablePrefix}workflow_entity ("name") `, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}a252c527c4c89237221fe2c0ab"`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}a252c527c4c89237221fe2c0ab"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1626176912946-AddwaitTill.ts b/packages/cli/src/databases/migrations/postgresdb/1626176912946-AddwaitTill.ts index af0c910431..917934e7dc 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1626176912946-AddwaitTill.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1626176912946-AddwaitTill.ts @@ -1,36 +1,20 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class AddwaitTill1626176912946 implements MigrationInterface { name = 'AddwaitTill1626176912946'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query(`ALTER TABLE ${tablePrefix}execution_entity ADD "waitTill" TIMESTAMP`); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS IDX_${tablePrefixPure}ca4a71b47f28ac6ea88293a8e2 ON ${tablePrefix}execution_entity ("waitTill")`, + `CREATE INDEX IF NOT EXISTS IDX_${tablePrefix}ca4a71b47f28ac6ea88293a8e2 ON ${tablePrefix}execution_entity ("waitTill")`, ); } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - - await queryRunner.query(`DROP INDEX IDX_${tablePrefixPure}ca4a71b47f28ac6ea88293a8e2`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`DROP INDEX IDX_${tablePrefix}ca4a71b47f28ac6ea88293a8e2`); await queryRunner.query(`ALTER TABLE ${tablePrefix}webhook_entity DROP COLUMN "waitTill"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1630419189837-UpdateWorkflowCredentials.ts b/packages/cli/src/databases/migrations/postgresdb/1630419189837-UpdateWorkflowCredentials.ts index 1116d7ceae..2a2f0d6898 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1630419189837-UpdateWorkflowCredentials.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1630419189837-UpdateWorkflowCredentials.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; -import { runInBatches } from '@db/utils/migrationHelpers'; +import { getTablePrefix, runInBatches } from '@db/utils/migrationHelpers'; // replacing the credentials in workflows and execution // `nodeType: name` changes to `nodeType: { id, name }` @@ -9,13 +8,7 @@ export class UpdateWorkflowCredentials1630419189837 implements MigrationInterfac name = 'UpdateWorkflowCredentials1630419189837'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); const credentialsEntities = await queryRunner.query(` SELECT id, name, type @@ -154,12 +147,7 @@ export class UpdateWorkflowCredentials1630419189837 implements MigrationInterfac } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); const credentialsEntities = await queryRunner.query(` SELECT id, name, type diff --git a/packages/cli/src/databases/migrations/postgresdb/1644422880309-AddExecutionEntityIndexes.ts b/packages/cli/src/databases/migrations/postgresdb/1644422880309-AddExecutionEntityIndexes.ts index 954f9e1464..5f3d4c55f7 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1644422880309-AddExecutionEntityIndexes.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1644422880309-AddExecutionEntityIndexes.ts @@ -1,66 +1,48 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class AddExecutionEntityIndexes1644422880309 implements MigrationInterface { name = 'AddExecutionEntityIndexes1644422880309'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`DROP INDEX IF EXISTS IDX_${tablePrefix}c4d999a5e90784e8caccf5589d`); + await queryRunner.query(`DROP INDEX IF EXISTS IDX_${tablePrefix}ca4a71b47f28ac6ea88293a8e2`); await queryRunner.query( - `DROP INDEX IF EXISTS "${schema}".IDX_${tablePrefixPure}c4d999a5e90784e8caccf5589d`, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}33228da131bb1112247cf52a42" ON ${tablePrefix}execution_entity ("stoppedAt") `, ); await queryRunner.query( - `DROP INDEX IF EXISTS "${schema}".IDX_${tablePrefixPure}ca4a71b47f28ac6ea88293a8e2`, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}58154df94c686818c99fb754ce" ON ${tablePrefix}execution_entity ("workflowId", "waitTill", "id") `, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}33228da131bb1112247cf52a42" ON ${tablePrefix}execution_entity ("stoppedAt") `, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}4f474ac92be81610439aaad61e" ON ${tablePrefix}execution_entity ("workflowId", "finished", "id") `, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}58154df94c686818c99fb754ce" ON ${tablePrefix}execution_entity ("workflowId", "waitTill", "id") `, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}72ffaaab9f04c2c1f1ea86e662" ON ${tablePrefix}execution_entity ("finished", "id") `, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}4f474ac92be81610439aaad61e" ON ${tablePrefix}execution_entity ("workflowId", "finished", "id") `, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}85b981df7b444f905f8bf50747" ON ${tablePrefix}execution_entity ("waitTill", "id") `, ); await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}72ffaaab9f04c2c1f1ea86e662" ON ${tablePrefix}execution_entity ("finished", "id") `, - ); - await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}85b981df7b444f905f8bf50747" ON ${tablePrefix}execution_entity ("waitTill", "id") `, - ); - await queryRunner.query( - `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefixPure}d160d4771aba5a0d78943edbe3" ON ${tablePrefix}execution_entity ("workflowId", "id") `, + `CREATE INDEX IF NOT EXISTS "IDX_${tablePrefix}d160d4771aba5a0d78943edbe3" ON ${tablePrefix}execution_entity ("workflowId", "id") `, ); } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); + const tablePrefix = getTablePrefix(); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}d160d4771aba5a0d78943edbe3"`); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}85b981df7b444f905f8bf50747"`); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}72ffaaab9f04c2c1f1ea86e662"`); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}4f474ac92be81610439aaad61e"`); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}58154df94c686818c99fb754ce"`); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}33228da131bb1112247cf52a42"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}d160d4771aba5a0d78943edbe3"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}85b981df7b444f905f8bf50747"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}72ffaaab9f04c2c1f1ea86e662"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}4f474ac92be81610439aaad61e"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}58154df94c686818c99fb754ce"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}33228da131bb1112247cf52a42"`); await queryRunner.query( - `CREATE INDEX "IDX_${tablePrefixPure}ca4a71b47f28ac6ea88293a8e2" ON ${tablePrefix}execution_entity ("waitTill") `, + `CREATE INDEX "IDX_${tablePrefix}ca4a71b47f28ac6ea88293a8e2" ON ${tablePrefix}execution_entity ("waitTill") `, ); await queryRunner.query( - `CREATE INDEX "IDX_${tablePrefixPure}c4d999a5e90784e8caccf5589d" ON ${tablePrefix}execution_entity ("workflowId") `, + `CREATE INDEX "IDX_${tablePrefix}c4d999a5e90784e8caccf5589d" ON ${tablePrefix}execution_entity ("workflowId") `, ); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1646834195327-IncreaseTypeVarcharLimit.ts b/packages/cli/src/databases/migrations/postgresdb/1646834195327-IncreaseTypeVarcharLimit.ts index 568aa3a133..ea4e2b4896 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1646834195327-IncreaseTypeVarcharLimit.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1646834195327-IncreaseTypeVarcharLimit.ts @@ -1,19 +1,11 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; - -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class IncreaseTypeVarcharLimit1646834195327 implements MigrationInterface { name = 'IncreaseTypeVarcharLimit1646834195327'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query( `ALTER TABLE ${tablePrefix}credentials_entity ALTER COLUMN "type" TYPE VARCHAR(128)`, ); diff --git a/packages/cli/src/databases/migrations/postgresdb/1646992772331-CreateUserManagement.ts b/packages/cli/src/databases/migrations/postgresdb/1646992772331-CreateUserManagement.ts index 26105e799c..741a81f8a3 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1646992772331-CreateUserManagement.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1646992772331-CreateUserManagement.ts @@ -1,20 +1,12 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; import { v4 as uuid } from 'uuid'; -import config from '@/config'; -import { loadSurveyFromDisk } from '@db/utils/migrationHelpers'; +import { getTablePrefix, loadSurveyFromDisk } from '@db/utils/migrationHelpers'; export class CreateUserManagement1646992772331 implements MigrationInterface { name = 'CreateUserManagement1646992772331'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); await queryRunner.query( `CREATE TABLE ${tablePrefix}role ( @@ -23,13 +15,13 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { "scope" VARCHAR(255) NOT NULL, "createdAt" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT "PK_${tablePrefixPure}e853ce24e8200abe5721d2c6ac552b73" PRIMARY KEY ("id"), - CONSTRAINT "UQ_${tablePrefixPure}5b49d0f504f7ef31045a1fb2eb8" UNIQUE ("scope", "name") + CONSTRAINT "PK_${tablePrefix}e853ce24e8200abe5721d2c6ac552b73" PRIMARY KEY ("id"), + CONSTRAINT "UQ_${tablePrefix}5b49d0f504f7ef31045a1fb2eb8" UNIQUE ("scope", "name") );`, ); await queryRunner.query( - `CREATE TABLE ${tablePrefix}user ( + `CREATE TABLE "${tablePrefix}user" ( "id" UUID NOT NULL DEFAULT uuid_in(overlay(overlay(md5(random()::text || ':' || clock_timestamp()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring), "email" VARCHAR(255), "firstName" VARCHAR(32), @@ -41,9 +33,9 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { "createdAt" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "globalRoleId" int NOT NULL, - CONSTRAINT "PK_${tablePrefixPure}ea8f538c94b6e352418254ed6474a81f" PRIMARY KEY ("id"), - CONSTRAINT "UQ_${tablePrefixPure}e12875dfb3b1d92d7d7c5377e2" UNIQUE (email), - CONSTRAINT "FK_${tablePrefixPure}f0609be844f9200ff4365b1bb3d" FOREIGN KEY ("globalRoleId") REFERENCES ${tablePrefix}role (id) + CONSTRAINT "PK_${tablePrefix}ea8f538c94b6e352418254ed6474a81f" PRIMARY KEY ("id"), + CONSTRAINT "UQ_${tablePrefix}e12875dfb3b1d92d7d7c5377e2" UNIQUE (email), + CONSTRAINT "FK_${tablePrefix}f0609be844f9200ff4365b1bb3d" FOREIGN KEY ("globalRoleId") REFERENCES ${tablePrefix}role (id) );`, ); @@ -54,16 +46,16 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { "roleId" INT NOT NULL, "userId" UUID NOT NULL, "workflowId" INT NOT NULL, - CONSTRAINT "PK_${tablePrefixPure}cc5d5a71c7b2591f5154ffb0c785e85e" PRIMARY KEY ("userId", "workflowId"), - CONSTRAINT "FK_${tablePrefixPure}3540da03964527aa24ae014b780" FOREIGN KEY ("roleId") REFERENCES ${tablePrefix}role ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT "FK_${tablePrefixPure}82b2fd9ec4e3e24209af8160282" FOREIGN KEY ("userId") REFERENCES ${tablePrefix}user ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_${tablePrefixPure}b83f8d2530884b66a9c848c8b88" FOREIGN KEY ("workflowId") REFERENCES + CONSTRAINT "PK_${tablePrefix}cc5d5a71c7b2591f5154ffb0c785e85e" PRIMARY KEY ("userId", "workflowId"), + CONSTRAINT "FK_${tablePrefix}3540da03964527aa24ae014b780" FOREIGN KEY ("roleId") REFERENCES ${tablePrefix}role ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_${tablePrefix}82b2fd9ec4e3e24209af8160282" FOREIGN KEY ("userId") REFERENCES "${tablePrefix}user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_${tablePrefix}b83f8d2530884b66a9c848c8b88" FOREIGN KEY ("workflowId") REFERENCES ${tablePrefix}workflow_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION );`, ); await queryRunner.query( - `CREATE INDEX "IDX_${tablePrefixPure}65a0933c0f19d278881653bf81d35064" ON ${tablePrefix}shared_workflow ("workflowId");`, + `CREATE INDEX "IDX_${tablePrefix}65a0933c0f19d278881653bf81d35064" ON ${tablePrefix}shared_workflow ("workflowId");`, ); await queryRunner.query( @@ -73,15 +65,15 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { "roleId" INT NOT NULL, "userId" UUID NOT NULL, "credentialsId" INT NOT NULL, - CONSTRAINT "PK_${tablePrefixPure}10dd1527ffb639609be7aadd98f628c6" PRIMARY KEY ("userId", "credentialsId"), - CONSTRAINT "FK_${tablePrefixPure}c68e056637562000b68f480815a" FOREIGN KEY ("roleId") REFERENCES ${tablePrefix}role ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT "FK_${tablePrefixPure}484f0327e778648dd04f1d70493" FOREIGN KEY ("userId") REFERENCES ${tablePrefix}user ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_${tablePrefixPure}68661def1d4bcf2451ac8dbd949" FOREIGN KEY ("credentialsId") REFERENCES ${tablePrefix}credentials_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION + CONSTRAINT "PK_${tablePrefix}10dd1527ffb639609be7aadd98f628c6" PRIMARY KEY ("userId", "credentialsId"), + CONSTRAINT "FK_${tablePrefix}c68e056637562000b68f480815a" FOREIGN KEY ("roleId") REFERENCES ${tablePrefix}role ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_${tablePrefix}484f0327e778648dd04f1d70493" FOREIGN KEY ("userId") REFERENCES "${tablePrefix}user" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_${tablePrefix}68661def1d4bcf2451ac8dbd949" FOREIGN KEY ("credentialsId") REFERENCES ${tablePrefix}credentials_entity ("id") ON DELETE CASCADE ON UPDATE NO ACTION );`, ); await queryRunner.query( - `CREATE INDEX "IDX_${tablePrefixPure}829d16efa0e265cb076d50eca8d21733" ON ${tablePrefix}shared_credentials ("credentialsId");`, + `CREATE INDEX "IDX_${tablePrefix}829d16efa0e265cb076d50eca8d21733" ON ${tablePrefix}shared_credentials ("credentialsId");`, ); await queryRunner.query( @@ -89,11 +81,11 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { "key" VARCHAR(255) NOT NULL, "value" TEXT NOT NULL, "loadOnStartup" boolean NOT NULL DEFAULT false, - CONSTRAINT "PK_${tablePrefixPure}dc0fe14e6d9943f268e7b119f69ab8bd" PRIMARY KEY ("key") + CONSTRAINT "PK_${tablePrefix}dc0fe14e6d9943f268e7b119f69ab8bd" PRIMARY KEY ("key") );`, ); - await queryRunner.query(`DROP INDEX "IDX_${tablePrefixPure}a252c527c4c89237221fe2c0ab"`); + await queryRunner.query(`DROP INDEX "IDX_${tablePrefix}a252c527c4c89237221fe2c0ab"`); // Insert initial roles await queryRunner.query( @@ -123,7 +115,7 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { const ownerUserId = uuid(); await queryRunner.query( - `INSERT INTO ${tablePrefix}user ("id", "globalRoleId", "personalizationAnswers") values ($1, $2, $3)`, + `INSERT INTO "${tablePrefix}user" ("id", "globalRoleId", "personalizationAnswers") values ($1, $2, $3)`, [ownerUserId, instanceOwnerRole[0].insertId, survey], ); @@ -142,21 +134,15 @@ export class CreateUserManagement1646992772331 implements MigrationInterface { } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const tablePrefixPure = tablePrefix; - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); await queryRunner.query( - `CREATE UNIQUE INDEX "IDX_${tablePrefixPure}a252c527c4c89237221fe2c0ab" ON ${tablePrefix}workflow_entity ("name")`, + `CREATE UNIQUE INDEX "IDX_${tablePrefix}a252c527c4c89237221fe2c0ab" ON ${tablePrefix}workflow_entity ("name")`, ); await queryRunner.query(`DROP TABLE ${tablePrefix}shared_credentials`); await queryRunner.query(`DROP TABLE ${tablePrefix}shared_workflow`); - await queryRunner.query(`DROP TABLE ${tablePrefix}user`); + await queryRunner.query(`DROP TABLE "${tablePrefix}user"`); await queryRunner.query(`DROP TABLE ${tablePrefix}role`); await queryRunner.query(`DROP TABLE ${tablePrefix}settings`); } diff --git a/packages/cli/src/databases/migrations/postgresdb/1648740597343-LowerCaseUserEmail.ts b/packages/cli/src/databases/migrations/postgresdb/1648740597343-LowerCaseUserEmail.ts index 85872af1c2..31f33849ed 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1648740597343-LowerCaseUserEmail.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1648740597343-LowerCaseUserEmail.ts @@ -1,20 +1,13 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class LowerCaseUserEmail1648740597343 implements MigrationInterface { name = 'LowerCaseUserEmail1648740597343'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.get('database.tablePrefix'); - const schema = config.get('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); - + const tablePrefix = getTablePrefix(); await queryRunner.query(` - UPDATE ${tablePrefix}user + UPDATE "${tablePrefix}user" SET email = LOWER(email); `); } diff --git a/packages/cli/src/databases/migrations/postgresdb/1652254514002-CommunityNodes.ts b/packages/cli/src/databases/migrations/postgresdb/1652254514002-CommunityNodes.ts index 93b020a640..a35395b155 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1652254514002-CommunityNodes.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1652254514002-CommunityNodes.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; -import { logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; +import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; export class CommunityNodes1652254514002 implements MigrationInterface { name = 'CommunityNodes1652254514002'; @@ -8,11 +7,7 @@ export class CommunityNodes1652254514002 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logMigrationStart(this.name); - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } + const tablePrefix = getTablePrefix(); await queryRunner.query( `CREATE TABLE ${tablePrefix}installed_packages (` + @@ -40,7 +35,7 @@ export class CommunityNodes1652254514002 implements MigrationInterface { } public async down(queryRunner: QueryRunner): Promise { - const tablePrefix = config.get('database.tablePrefix'); + const tablePrefix = getTablePrefix(); await queryRunner.query(`DROP TABLE "${tablePrefix}installed_nodes"`); await queryRunner.query(`DROP TABLE "${tablePrefix}installed_packages"`); } diff --git a/packages/cli/src/databases/migrations/postgresdb/1652367743993-AddUserSettings.ts b/packages/cli/src/databases/migrations/postgresdb/1652367743993-AddUserSettings.ts index 03f78da838..1c4439aff2 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1652367743993-AddUserSettings.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1652367743993-AddUserSettings.ts @@ -1,33 +1,21 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class AddUserSettings1652367743993 implements MigrationInterface { name = 'AddUserSettings1652367743993'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } + const tablePrefix = getTablePrefix(); - await queryRunner.query(`SET search_path TO ${schema};`); - - await queryRunner.query(`ALTER TABLE ${tablePrefix}user ADD COLUMN settings json`); + await queryRunner.query(`ALTER TABLE "${tablePrefix}user" ADD COLUMN settings json`); await queryRunner.query( - `ALTER TABLE ${tablePrefix}user ALTER COLUMN "personalizationAnswers" TYPE json USING to_jsonb("personalizationAnswers")::json;`, + `ALTER TABLE "${tablePrefix}user" ALTER COLUMN "personalizationAnswers" TYPE json USING to_jsonb("personalizationAnswers")::json;`, ); } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`SET search_path TO ${schema};`); - - await queryRunner.query(`ALTER TABLE ${tablePrefix}user DROP COLUMN settings`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`ALTER TABLE "${tablePrefix}user" DROP COLUMN settings`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1652905585850-AddAPIKeyColumn.ts b/packages/cli/src/databases/migrations/postgresdb/1652905585850-AddAPIKeyColumn.ts index da83269c79..2462e9556e 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1652905585850-AddAPIKeyColumn.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1652905585850-AddAPIKeyColumn.ts @@ -1,28 +1,20 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class AddAPIKeyColumn1652905585850 implements MigrationInterface { name = 'AddAPIKeyColumn1652905585850'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - await queryRunner.query(`ALTER TABLE ${tablePrefix}user ADD COLUMN "apiKey" VARCHAR(255)`); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`ALTER TABLE "${tablePrefix}user" ADD COLUMN "apiKey" VARCHAR(255)`); await queryRunner.query( - `CREATE UNIQUE INDEX "UQ_${tablePrefix}ie0zomxves9w3p774drfrkxtj5" ON ${tablePrefix}user ("apiKey")`, + `CREATE UNIQUE INDEX "UQ_${tablePrefix}ie0zomxves9w3p774drfrkxtj5" ON "${tablePrefix}user" ("apiKey")`, ); } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } + const tablePrefix = getTablePrefix(); await queryRunner.query(`DROP INDEX "UQ_${tablePrefix}ie0zomxves9w3p774drfrkxtj5"`); - await queryRunner.query(`ALTER TABLE ${tablePrefix}user DROP COLUMN "apiKey"`); + await queryRunner.query(`ALTER TABLE "${tablePrefix}user" DROP COLUMN "apiKey"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1654090467022-IntroducePinData.ts b/packages/cli/src/databases/migrations/postgresdb/1654090467022-IntroducePinData.ts index 2713146a52..651c700b1c 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1654090467022-IntroducePinData.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1654090467022-IntroducePinData.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import { logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; -import config from '@/config'; +import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; export class IntroducePinData1654090467022 implements MigrationInterface { name = 'IntroducePinData1654090467022'; @@ -8,26 +7,14 @@ export class IntroducePinData1654090467022 implements MigrationInterface { async up(queryRunner: QueryRunner) { logMigrationStart(this.name); - const schema = config.getEnv('database.postgresdb.schema'); - const tablePrefix = config.getEnv('database.tablePrefix'); - - await queryRunner.query(`SET search_path TO ${schema}`); - - await queryRunner.query( - `ALTER TABLE ${schema}.${tablePrefix}workflow_entity ADD "pinData" json`, - ); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`ALTER TABLE ${tablePrefix}workflow_entity ADD "pinData" json`); logMigrationEnd(this.name); } async down(queryRunner: QueryRunner) { - const schema = config.getEnv('database.postgresdb.schema'); - const tablePrefix = config.getEnv('database.tablePrefix'); - - await queryRunner.query(`SET search_path TO ${schema}`); - - await queryRunner.query( - `ALTER TABLE ${schema}.${tablePrefix}workflow_entity DROP COLUMN "pinData"`, - ); + const tablePrefix = getTablePrefix(); + await queryRunner.query(`ALTER TABLE ${tablePrefix}workflow_entity DROP COLUMN "pinData"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1658932090381-AddNodeIds.ts b/packages/cli/src/databases/migrations/postgresdb/1658932090381-AddNodeIds.ts index afb7dd653b..aad02eca8f 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1658932090381-AddNodeIds.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1658932090381-AddNodeIds.ts @@ -1,7 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; -import { runInBatches } from '@db/utils/migrationHelpers'; import { v4 as uuid } from 'uuid'; +import { getTablePrefix, runInBatches } from '@db/utils/migrationHelpers'; // add node ids in workflow objects @@ -9,13 +8,7 @@ export class AddNodeIds1658932090381 implements MigrationInterface { name = 'AddNodeIds1658932090381'; public async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); const workflowsQuery = ` SELECT id, nodes @@ -49,13 +42,7 @@ export class AddNodeIds1658932090381 implements MigrationInterface { } public async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - - await queryRunner.query(`SET search_path TO ${schema};`); + const tablePrefix = getTablePrefix(); const workflowsQuery = ` SELECT id, nodes diff --git a/packages/cli/src/databases/migrations/postgresdb/1660062385367-CreateCredentialsUserRole.ts b/packages/cli/src/databases/migrations/postgresdb/1660062385367-CreateCredentialsUserRole.ts index 444e37371c..6d94c29fd1 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1660062385367-CreateCredentialsUserRole.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1660062385367-CreateCredentialsUserRole.ts @@ -1,16 +1,11 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import config from '@/config'; +import { getTablePrefix } from '@db/utils/migrationHelpers'; export class CreateCredentialsUserRole1660062385367 implements MigrationInterface { name = 'CreateCredentialsUserRole1660062385367'; async up(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - + const tablePrefix = getTablePrefix(); await queryRunner.query(` INSERT INTO ${tablePrefix}role (name, scope) VALUES ('user', 'credential') @@ -19,12 +14,7 @@ export class CreateCredentialsUserRole1660062385367 implements MigrationInterfac } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - + const tablePrefix = getTablePrefix(); await queryRunner.query(` DELETE FROM ${tablePrefix}role WHERE name='user' AND scope='credential'; `); diff --git a/packages/cli/src/databases/migrations/postgresdb/1664196174001-WorkflowStatistics.ts b/packages/cli/src/databases/migrations/postgresdb/1664196174001-WorkflowStatistics.ts index 41959520b2..efe835dffa 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1664196174001-WorkflowStatistics.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1664196174001-WorkflowStatistics.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import { getTablePrefix, logMigrationEnd, logMigrationStart } from '../../utils/migrationHelpers'; -import config from '@/config'; +import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; export class WorkflowStatistics1664196174001 implements MigrationInterface { name = 'WorkflowStatistics1664196174001'; @@ -30,12 +29,7 @@ export class WorkflowStatistics1664196174001 implements MigrationInterface { } async down(queryRunner: QueryRunner): Promise { - let tablePrefix = config.getEnv('database.tablePrefix'); - const schema = config.getEnv('database.postgresdb.schema'); - if (schema) { - tablePrefix = schema + '.' + tablePrefix; - } - + const tablePrefix = getTablePrefix(); await queryRunner.query(`DROP TABLE ${tablePrefix}workflow_statistics`); await queryRunner.query(`ALTER TABLE ${tablePrefix}workflow_entity DROP COLUMN dataLoaded`); } diff --git a/packages/cli/src/databases/migrations/postgresdb/1669739707126-AddWorkflowVersionIdColumn.ts b/packages/cli/src/databases/migrations/postgresdb/1669739707126-AddWorkflowVersionIdColumn.ts index 6ba9555c8e..207187d978 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1669739707126-AddWorkflowVersionIdColumn.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1669739707126-AddWorkflowVersionIdColumn.ts @@ -1,7 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; -import config from '@/config'; import { v4 as uuidv4 } from 'uuid'; +import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; export class AddWorkflowVersionIdColumn1669739707126 implements MigrationInterface { name = 'AddWorkflowVersionIdColumn1669739707126'; @@ -37,8 +36,7 @@ export class AddWorkflowVersionIdColumn1669739707126 implements MigrationInterfa } async down(queryRunner: QueryRunner) { - const tablePrefix = config.getEnv('database.tablePrefix'); - + const tablePrefix = getTablePrefix(); await queryRunner.query(`ALTER TABLE ${tablePrefix}workflow_entity DROP COLUMN "versionId"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1669823906995-AddTriggerCountColumn.ts b/packages/cli/src/databases/migrations/postgresdb/1669823906995-AddTriggerCountColumn.ts index 0121223c87..355e1e64c6 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1669823906995-AddTriggerCountColumn.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1669823906995-AddTriggerCountColumn.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; -import config from '@/config'; export class AddTriggerCountColumn1669823906995 implements MigrationInterface { name = 'AddTriggerCountColumn1669823906995'; @@ -21,8 +20,6 @@ export class AddTriggerCountColumn1669823906995 implements MigrationInterface { async down(queryRunner: QueryRunner): Promise { const tablePrefix = getTablePrefix(); - await queryRunner.query( - `ALTER TABLE ${tablePrefix}workflow_entity DROP COLUMN "triggerCount"`, - ); + await queryRunner.query(`ALTER TABLE ${tablePrefix}workflow_entity DROP COLUMN "triggerCount"`); } } diff --git a/packages/cli/src/databases/migrations/postgresdb/1671726148421-RemoveWorkflowDataLoadedFlag.ts b/packages/cli/src/databases/migrations/postgresdb/1671726148421-RemoveWorkflowDataLoadedFlag.ts index f8b5af1647..2c8d3d00e7 100644 --- a/packages/cli/src/databases/migrations/postgresdb/1671726148421-RemoveWorkflowDataLoadedFlag.ts +++ b/packages/cli/src/databases/migrations/postgresdb/1671726148421-RemoveWorkflowDataLoadedFlag.ts @@ -1,6 +1,5 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; import { getTablePrefix, logMigrationEnd, logMigrationStart } from '@db/utils/migrationHelpers'; -import config from '@/config'; import { StatisticsNames } from '@/databases/entities/WorkflowStatistics'; export class RemoveWorkflowDataLoadedFlag1671726148421 implements MigrationInterface { diff --git a/packages/cli/src/databases/utils/migrationHelpers.ts b/packages/cli/src/databases/utils/migrationHelpers.ts index 676849418f..88bb8b0598 100644 --- a/packages/cli/src/databases/utils/migrationHelpers.ts +++ b/packages/cli/src/databases/utils/migrationHelpers.ts @@ -91,16 +91,7 @@ export async function runInBatches( } while (batchedQueryResults.length === limit); } -export const getTablePrefix = () => { - const tablePrefix = config.getEnv('database.tablePrefix'); - - if (config.getEnv('database.type') === 'postgresdb') { - const schema = config.getEnv('database.postgresdb.schema'); - return [schema, tablePrefix].join('.'); - } - - return tablePrefix; -}; +export const getTablePrefix = () => config.getEnv('database.tablePrefix'); export const escapeQuery = ( queryRunner: QueryRunner, diff --git a/packages/cli/test/integration/shared/testDb.ts b/packages/cli/test/integration/shared/testDb.ts index 0f7ad277cc..bdd2e48327 100644 --- a/packages/cli/test/integration/shared/testDb.ts +++ b/packages/cli/test/integration/shared/testDb.ts @@ -45,14 +45,11 @@ export type TestDBType = 'postgres' | 'mysql'; export async function init() { jest.setTimeout(DB_INITIALIZATION_TIMEOUT); const dbType = config.getEnv('database.type'); + const testDbName = `n8n_test_${randomString(6, 10)}_${Date.now()}`; if (dbType === 'sqlite') { // no bootstrap connection required - const testDbName = `n8n_test_sqlite_${randomString(6, 10)}_${Date.now()}`; - await Db.init(getSqliteOptions({ name: testDbName })); - await Db.getConnection().runMigrations({ transaction: 'none' }); - - return { testDbName }; + return Db.init(getSqliteOptions({ name: testDbName })); } if (dbType === 'postgresdb') { @@ -80,34 +77,18 @@ export async function init() { process.exit(1); } - const testDbName = `postgres_${randomString(6, 10)}_${Date.now()}_n8n_test`; await bootstrapPostgres.query(`CREATE DATABASE ${testDbName}`); await bootstrapPostgres.destroy(); - const dbOptions = getDBOptions('postgres', testDbName); - - if (dbOptions.schema !== 'public') { - const { schema, migrations, ...options } = dbOptions; - const connection = await new Connection(options).initialize(); - await connection.query(`CREATE SCHEMA IF NOT EXISTS "${schema}"`); - await connection.destroy(); - } - - await Db.init(dbOptions); - - return { testDbName }; + return Db.init(getDBOptions('postgres', testDbName)); } if (dbType === 'mysqldb') { const bootstrapMysql = await new Connection(getBootstrapDBOptions('mysql')).initialize(); - - const testDbName = `mysql_${randomString(6, 10)}_${Date.now()}_n8n_test`; await bootstrapMysql.query(`CREATE DATABASE ${testDbName}`); await bootstrapMysql.destroy(); - await Db.init(getDBOptions('mysql', testDbName)); - - return { testDbName }; + return Db.init(getDBOptions('mysql', testDbName)); } throw new Error(`Unrecognized DB type: ${dbType}`); @@ -693,7 +674,7 @@ const getDBOptions = (type: TestDBType, name: string) => ({ ...baseOptions(type), dropSchema: true, migrations: type === 'postgres' ? postgresMigrations : mysqlMigrations, - migrationsRun: true, + migrationsRun: false, migrationsTableName: 'migrations', entities: Object.values(entities), synchronize: false,