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 connectionYesYesYes, 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 statementsNoYes 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 transactionsNoYes, but retry handling is caller/deploy concernNeeds retry-aware operations
MSSQLdrivers/mssqlsp_getapplock on a pinned sessionYes for transactional statementsNoDepends 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 transactionYesNoNoNoNoNo
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 currently has the strongest guarantee because its driver implements transactional recording.

For other drivers, a migration can succeed and the record write can fail as a separate step. That is rare, but it matters for incident playbooks: 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.