Skip to main content

Support Matrix

Queen has one API across drivers, but databases do not provide the same locking, transaction, and DDL behavior. Use this page before picking a production target.

Driver capabilities​

DatabaseDriver packageLock typeMigration body transactionMigration record atomic with bodyRollback supportProduction fit
PostgreSQLdrivers/postgresAdvisory lock on a pinned connectionYes by defaultYes by default; non-transactional SQL uses recovery markersYes, when migration has DownSQL or DownFuncReference production path
MySQLdrivers/mysqlGET_LOCK on a pinned connectionYes for transactional statementsNoDepends on MySQL DDL semanticsUsable with DDL caveats
SQLitedrivers/sqliteLocal SQLite write coordinationYes for transactional statementsYesYes for transactional statementsLocal, tests, single-process tools
ClickHousedrivers/clickhouseBest-effort table guard with expiryNo true transaction modelNoLimited by ClickHouse DDL behaviorOperationally serialized deployments
CockroachDBdrivers/cockroachdbTable row with expirySerializable transactions with bounded 40001 retriesYesYes for transactional statements; callbacks must be retry-safeNeeds retry-aware operations
MSSQLdrivers/mssqlsp_getapplock on a pinned sessionYes for transactional statementsYesDepends on SQL Server DDL semanticsUsable with DDL caveats

Feature matrix​

FeaturePostgreSQLMySQLSQLiteClickHouseCockroachDBMSSQL
SQL migrationsYesYesYesYesYesYes
Go-function migrationsYesYesYesYesYesYes
Mixed SQL + Go migrationsYesYesYesYesYesYes
Automatic checksum for SQLYesYesYesYesYesYes
Manual checksum for functionsYesYesYesYesYesYes
Bounded lock timeoutYesYesLimited by SQLite behaviorBest effortYesYes
Multi-process lock suitable for productionYesYesNoBest effortYes, with retry careYes
Migration body and record in one transactionYes by defaultNoYesNoYesYes
Pool adapterpgxpoolNoNoNoNoNo

How to read "atomic record"​

"Migration record atomic with body" means Queen commits both the migration work and the row in the migration table in the same database transaction. PostgreSQL, SQLite, CockroachDB, and MSSQL implement transactional recording. PostgreSQL's opt-in non-transactional mode uses recovery markers because those SQL commands cannot share a transaction with the record.

For MySQL and ClickHouse, a migration can succeed and the record write can fail as a separate step. Check status, log, and your schema before retrying.

  • Use PostgreSQL for the strongest current Queen contract.
  • Use SQLite for local development, tests, and embedded tools.
  • Use MySQL and MSSQL when your team already understands each database's DDL transaction behavior.
  • Use CockroachDB with retry-aware deployment scripts.
  • Use ClickHouse only with one migrator process at a time.