n8n-io/n8n · error · TypeORMError
sqlit driver does not support change comment.
Error message
sqlit driver does not support change comment.
What it means
SQLite has no native table-comment support, so AbstractSqliteQueryRunner.changeTableComment() unconditionally throws TypeORMError on call. There is no workaround on this driver.
Source
Thrown at packages/@n8n/typeorm/src/driver/sqlite-abstract/AbstractSqliteQueryRunner.ts:1953
/**
* Escapes given table or view path. Tolerates leading/trailing dots
*/
protected escapePath(target: Table | View | string, disableEscape?: boolean): string {
const tableName =
InstanceChecker.isTable(target) || InstanceChecker.isView(target) ? target.name : target;
return tableName
.replace(/^\.+|\.+$/g, '')
.split('.')
.map((i) => (disableEscape ? i : `"${i.replace(/"/g, '""')}"`))
.join('.');
}
/**
* Change table comment.
*/
changeTableComment(tableOrName: Table | string, comment?: string): Promise<void> {
throw new TypeORMError(`sqlit driver does not support change comment.`);
}
}
View on GitHub (pinned to 5ac6606e81)
Solutions
- Remove `comment` from entities used with SQLite.
- Branch schema setup on driver type — only set comments for drivers that support them.
- Store documentation elsewhere (a metadata table, code comments) if you need it on SQLite.
Example fix
// before
@Entity({ comment: 'Application users' })
class User {}
// after (for SQLite-targeted entities)
@Entity()
class User {} Defensive patterns
Strategy: type-guard
Validate before calling
function supportsTableComments(ds: DataSource): boolean {
const t = ds.options.type;
return t !== 'sqlite' && t !== 'sqlite-pooled' && t !== 'better-sqlite3';
}
if (supportsTableComments(dataSource)) {
await queryRunner.changeTableComment(table, 'users');
} Type guard
const driverSupportsTableComments = (ds: DataSource): boolean => ds.options.type !== 'sqlite' && ds.options.type !== 'sqlite-pooled' && ds.options.type !== 'better-sqlite3';
Prevention
- Omit `comment` from entities used with SQLite.
- Branch comment-setting logic on driver type.
- Keep driver-specific schema features behind capability checks.
When it happens
Trigger: Calling queryRunner.changeTableComment(table, comment) on a SQLite DataSource, or an entity declaring a comment that TypeORM tries to apply during sync/migration.
Common situations: Entities with `@Entity({ comment: '...' })` synced against SQLite; cross-driver schema code that sets comments; code ported from Postgres/MySQL.
Related errors
- SQLite package has not been found installed. Try to install
- Transactions aren't supported by ${this.connection.driver.op
- SQLite only supports SERIALIZABLE and READ UNCOMMITTED isola
- Transaction rollback failed
- Stream is not supported by sqlite driver.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/9dd79b6ca8d4bd3a.
Report an issue: GitHub.