n8n/packages/cli/src/databases/config.ts
कारतोफ्फेलस्क्रिप्ट™ 9b4856e7de
feat(core): Make postgres pool-size configurable (no-changelog) (#7772)
When we upgrade typeorm in #5151, we switched from no pooling to a
default pool-size of 10. This somehow significantly deteriorates the
performance of queries when the application is under load.
2023-11-21 18:13:08 +01:00

79 lines
2.8 KiB
TypeScript

import path from 'path';
import { Container } from 'typedi';
import type { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions';
import type { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
import type { MysqlConnectionOptions } from 'typeorm/driver/mysql/MysqlConnectionOptions';
import { InstanceSettings } from 'n8n-core';
import { entities } from './entities';
import { mysqlMigrations } from './migrations/mysqldb';
import { postgresMigrations } from './migrations/postgresdb';
import { sqliteMigrations } from './migrations/sqlite';
import type { DatabaseType } from '@db/types';
import config from '@/config';
const entitiesDir = path.resolve(__dirname, 'entities');
const getDBConnectionOptions = (dbType: DatabaseType) => {
const entityPrefix = config.getEnv('database.tablePrefix');
const migrationsDir = path.resolve(__dirname, 'migrations', dbType);
const configDBType = dbType === 'mariadb' ? 'mysqldb' : dbType;
const connectionDetails =
configDBType === 'sqlite'
? {
database: path.resolve(
Container.get(InstanceSettings).n8nFolder,
config.getEnv('database.sqlite.database'),
),
enableWAL: config.getEnv('database.sqlite.enableWAL'),
}
: {
database: config.getEnv(`database.${configDBType}.database`),
username: config.getEnv(`database.${configDBType}.user`),
password: config.getEnv(`database.${configDBType}.password`),
host: config.getEnv(`database.${configDBType}.host`),
port: config.getEnv(`database.${configDBType}.port`),
};
return {
entityPrefix,
entities: Object.values(entities),
migrationsTableName: `${entityPrefix}migrations`,
cli: { entitiesDir, migrationsDir },
...connectionDetails,
};
};
export const getOptionOverrides = (dbType: 'postgresdb' | 'mysqldb') => ({
database: config.getEnv(`database.${dbType}.database`),
host: config.getEnv(`database.${dbType}.host`),
port: config.getEnv(`database.${dbType}.port`),
username: config.getEnv(`database.${dbType}.user`),
password: config.getEnv(`database.${dbType}.password`),
});
export const getSqliteConnectionOptions = (): SqliteConnectionOptions => ({
type: 'sqlite',
...getDBConnectionOptions('sqlite'),
migrations: sqliteMigrations,
});
export const getPostgresConnectionOptions = (): PostgresConnectionOptions => ({
type: 'postgres',
...getDBConnectionOptions('postgresdb'),
schema: config.getEnv('database.postgresdb.schema'),
poolSize: config.getEnv('database.postgresdb.poolSize'),
migrations: postgresMigrations,
});
export const getMysqlConnectionOptions = (): MysqlConnectionOptions => ({
type: 'mysql',
...getDBConnectionOptions('mysqldb'),
migrations: mysqlMigrations,
});
export const getMariaDBConnectionOptions = (): MysqlConnectionOptions => ({
type: 'mariadb',
...getDBConnectionOptions('mysqldb'),
migrations: mysqlMigrations,
});