diff --git a/packages/cli/src/Db.ts b/packages/cli/src/Db.ts index 0bb52e1205f..1c129657e58 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 1c47c39e6ab..5abe0567695 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 17de6bc65ed..87087218702 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 5f66c8538f9..e1607a77324 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 4226155ce87..6e91124b2ed 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 6bf370444c8..3b6b795e60b 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 316400eb5d7..809f1de2e31 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 b56b6448532..71057557f72 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 339c90b3370..acfda7410b3 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 79c30e1f7df..54f22a8fef6 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 af0c910431d..917934e7dcc 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 1116d7ceaed..2a2f0d68985 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 954f9e14642..5f3d4c55f71 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 568aa3a133c..ea4e2b4896b 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 26105e799c9..741a81f8a3c 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 85872af1c28..31f33849ed5 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 93b020a6404..a35395b1558 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 03f78da8384..1c4439aff28 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 da83269c792..2462e9556ef 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 2713146a526..651c700b1c2 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 afb7dd653b7..aad02eca8f7 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 444e37371c3..6d94c29fd12 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 41959520b25..efe835dffab 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 6ba9555c8ef..207187d978f 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 0121223c876..355e1e64c63 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 f8b5af1647d..2c8d3d00e73 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 676849418fe..88bb8b05980 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 0f7ad277cc8..bdd2e483273 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,