Capability matrix
Every engine DBLift ships with, what to install for it, and the three behaviours that change how you write a migration: whether DDL rolls back, how indexes are built, and whether SQL migrations apply at all.
Engines
The type value goes under database: in dblift.yaml. The driver is installed by the extra beside it; you never import it yourself.
postgresqlpip install "dblift[postgresql]"psycopgmysqlpip install "dblift[mysql]"pymysqlmariadbpip install "dblift[mariadb]"pymysqloraclepip install "dblift[oracle]"python-oracledbsqlserverpip install "dblift[sqlserver]"pymssqldb2pip install "dblift[db2]"ibm_db_sasqlitepip install "dblift"sqlite3duckdbpip install "dblift[duckdb]"duckdbsnowflakepip install "dblift[snowflake]"snowflake-connector-pythonredshiftpip install "dblift[redshift]"redshift_connectorcosmosdbpip install "dblift[cosmosdb]"azure-cosmosmongodbpip install "dblift[mongodb]"pymongoaurora-postgresqlpip install "dblift[aurora-postgresql]"psycopgalloydbpip install "dblift[alloydb]"psycopgneonpip install "dblift[neon]"psycopgsupabasepip install "dblift[supabase]"psycopgtimescaledbpip install "dblift[timescaledb]"psycopgcituspip install "dblift[citus]"psycopgcockroachdbpip install "dblift[cockroachdb]"psycopgyugabytedbpip install "dblift[yugabytedb]"psycopgPostgreSQL-wire engines. Aurora PostgreSQL, AlloyDB, Neon, Supabase, TimescaleDB, Citus and YugabyteDB speak the PostgreSQL wire protocol. Keep your postgresql:// connection string and set the type to the engine — DBLift uses the PostgreSQL behaviour for everything except the differences listed below.
Does a failed migration roll back?
This is the single biggest difference between engines. Where DDL is transactional, a migration that fails half-way leaves the schema untouched. Where DDL auto-commits, the statements that already ran stay applied and you finish the cleanup yourself — write an undo script for those migrations.
DDL rolls back
- PostgreSQL
- SQL Server
- IBM Db2
- SQLite
- DuckDB
- Amazon Redshift
- Aurora PostgreSQL
- Google AlloyDB
- Neon
- Supabase
- TimescaleDB
- Citus
- CockroachDB
DDL auto-commits
- MySQL
- MariaDB
- Oracle
- YugabyteDB
- Snowflake
Azure Cosmos DB has no transactions of any kind.
Building an index without blocking
PostgreSQL and the PostgreSQL-wire engines
CREATE INDEX CONCURRENTLY is available and cannot run inside a transaction. Keep a concurrent index build in its own migration.
SQL Server
Index builds take the ONLINE option instead. The concurrent form does not exist.
TimescaleDB, CockroachDB, YugabyteDB
Do not write CONCURRENTLY. YugabyteDB already backfills online. CockroachDB accepts the clause as a no-op. Timescale hypertables do not accept it.
Amazon Redshift
No CREATE INDEX at all — Redshift uses sort keys and zone maps. An index migration will be rejected by the server.
Azure Cosmos DB is not SQL
Cosmos DB and MongoDB are the document engines. Neither accepts SQL migrations, and neither has transactions or transactional DDL, so nothing rolls back. Migrations are Python, written against the vendor SDK. Everything else on this page — versioning, history, the schema history table — works the same way.