配置信息
packages\@n8n\config\src\configs\database.config.ts
javascript
@Config
export class SqliteConfig {
/** SQLite database file name */
@Env('DB_SQLITE_DATABASE')
database: string = 'database.sqlite';
/** SQLite database pool size. Set to `0` to disable pooling. */
@Env('DB_SQLITE_POOL_SIZE')
poolSize: number = 0;
/**
* Enable SQLite WAL mode.
*/
@Env('DB_SQLITE_ENABLE_WAL')
enableWAL: boolean = this.poolSize > 1;
/**
* Run `VACUUM` on startup to rebuild the database, reducing file size and optimizing indexes.
*
* @warning Long-running blocking operation that will increase startup time.
*/
@Env('DB_SQLITE_VACUUM_ON_STARTUP')
executeVacuumOnStartup: boolean = false;
}

SQLite 数据库文件存储位置
C:\Users\用户名\.n8n\database.sqlite

构建连接选项
javascript
private getSqliteConnectionOptions(): SqliteConnectionOptions | SqlitePooledConnectionOptions {
const { sqlite: sqliteConfig } = this.config;
const { n8nFolder } = this.instanceSettingsConfig;
const commonOptions = {
...this.getCommonOptions(),
database: path.resolve(n8nFolder, sqliteConfig.database),
migrations: sqliteMigrations,
};
if (sqliteConfig.poolSize > 0) {
return {
type: 'sqlite-pooled',
poolSize: sqliteConfig.poolSize,
enableWAL: true,
acquireTimeout: 60_000,
destroyTimeout: 5_000,
...commonOptions,
};
} else {
return {
type: 'sqlite',
enableWAL: sqliteConfig.enableWAL,
...commonOptions,
};
}
}

初始化连接
packages\@n8n\db\src\connection\db-connection.ts
javascript
async init(): Promise<void> {
const { connectionState, options } = this;
if (connectionState.connected) return;
try {
await this.dataSource.initialize();
} catch (e) {
let error = ensureError(e);
if (
options.type === 'postgres' &&
error.message === 'Connection terminated due to connection timeout'
) {
error = new DbConnectionTimeoutError({
cause: error,
configuredTimeoutInMs: options.connectTimeoutMS!,
});
}
throw error;
}
if (
(options.type === 'mysql' || options.type === 'mariadb') &&
this.binaryDataConfig.availableModes.includes('database')
) {
const maxAllowedPacket = this.binaryDataConfig.dbMaxFileSize * 1024 * 1024;
try {
await this.dataSource.query(`SET GLOBAL max_allowed_packet = ${maxAllowedPacket}`);
} catch {
this.logger.warn(
`Failed to set \`max_allowed_packet\` to ${maxAllowedPacket} bytes on your MySQL server. ` +
`Please set \`max_allowed_packet\` to at least ${this.binaryDataConfig.dbMaxFileSize} MiB in your MySQL server configuration.`,
);
}
}
connectionState.connected = true;
if (!inTest) this.scheduleNextPing();
}

直接修改数据库的值

