Docs/Engines/Capability matrix
OSS

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.

PostgreSQL-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.

On this page