← All writing

Snowflake's Postgres Mirroring Is GA: How It Stacks Up Against Databricks Lakebase

A puddle on wet asphalt reflects an orange tower crane and a few buildings upside down, next to yellow road markings
Cover · Source: JJ Shev / Unsplash
Contents
  1. Snowflake lets Postgres push its own changes out
  2. Side by side, Snowflake is more consistent and Databricks goes both ways
  3. “Within seconds” means the $live view, which can show half a transaction
  4. Databricks hands you a change log and leaves current state to you
  5. Databricks syncs results back today; Snowflake says “stay tuned”
  6. Choose by the direction your data moves

On October 15 Snowflake made data mirroring for Snowflake Postgres generally available.1 Inserts, updates, deletes and schema changes on a Snowflake-managed Postgres instance now flow into Snowflake without a replication service of your own.

Databricks Lakebase, also a managed Postgres, streams changes into Unity Catalog Delta tables and can sync lakehouse tables back.57 Both vendors want to remove the hand-built pipe between application database and analytics. First what Snowflake shipped, then the two side by side.

Snowflake lets Postgres push its own changes out

Mirroring runs on pg_lake, Snowflake’s open-source Postgres extension. It captures changes with standard logical replication, pushes them in transactional batches to Apache Iceberg change logs, and Snowflake applies them to the target tables with serverless compute.1 The analytics side never scans the application database.

One CREATE_MIRROR call mirrors chosen tables, a schema or a database, and new tables in a mirrored schema join automatically. Targets are standard Snowflake tables or Iceberg tables.12 Each mirrored table also gets $changes, a seven-day change feed, and a $live view that adds in-flight changes to merged data.13

It runs on AWS and Azure, never across accounts, regions or clouds.2 There is no published price. Snowflake says Ericsson consolidated four legacy databases with it and cut data processing time by 99%.1

Side by side, Snowflake is more consistent and Databricks goes both ways

FIG.1Snowflake Postgres mirroring and Databricks Lakebase side by side. Circled numbers point to the notes below the table. Based on both vendors' blogs and documentation, read on 2026-10-16.

Three of these differences are easy to miss.

“Within seconds” means the $live view, which can show half a transaction

The blog promises committed changes within seconds.1 The docs describe three layers: $changes follows the source, $live refreshes from it every 30 seconds, and target tables merge every refresh_interval, 10 minutes by default and anywhere from 30 seconds to a day.23

The docs also say $live is not transactional: it can show some rows of a transaction before others, and for consistency you should query the target tables.3 So with the defaults you pick fresh or whole. $live may show the debit of a transfer without the credit; the target tables show both, up to about 10 minutes late. A shorter interval costs more, because every $live query scans all unmerged $changes rows.3 I would send reconciliation, audit and external reports to the target tables, and dashboards and alerts to $live.

Databricks hands you a change log and leaves current state to you

Lakebase Change Data Feed, in Public Preview, decodes the WAL with the wal2delta extension and writes a batch about every 15 seconds into one lb_<table>_history Delta table per source table.5 It is configured per schema and picks up new tables automatically.6

Each row carries the change type, _pg_lsn, _pg_xid and a timestamp, and an update becomes a before row and an after row.5 Auditors like that shape. Current state, though, you build yourself with a materialized view, a Lakeflow pipeline or a streaming MERGE.5 Cross-table consistency is not documented; _pg_xid should let you regroup changes by transaction, but that work is yours.

Databricks syncs results back today; Snowflake says “stay tuned”

Databricks synced tables copy Delta tables, Iceberg tables and views from Unity Catalog into read-only Lakebase Postgres tables, in Snapshot, Triggered or Continuous mode. Continuous runs as often as every 15 seconds; Triggered gets expensive below five-minute intervals.7 That suits sending recommendation scores or risk flags back to an application.

Snowflake’s blog only says reverse mirroring is coming, with no date.1 Until then, results go back to Postgres through a pipeline of your own.

FIG.2Which directions work today. Snowflake has one way, already GA. Databricks has both, with the outbound leg still in preview.

Choose by the direction your data moves

  • Application data for analytics, already on Snowflake: mirroring is GA and moves tables forward together by transaction. Pick target tables or $live per use case, and treat refresh_interval as a cost knob.
  • Results back to the application, or a full before-and-after change log: Databricks covers both directions, but check the prerequisites in the last row of figure 1 before relying on the preview leg.
  • Long-lived history for audit: $changes keeps seven days, and a re-snapshot after slot invalidation drops the incremental history,34 so copy it out on a schedule. Lakebase history tables are append-only with no documented retention limit, but consistency is on you.

Snowflake finished consistency first; Databricks finished both directions first. Pick by the way your data travels most.

References

  1. Data Mirroring Is GA: Your Postgres Data, in Snowflake, Without the Pipelines, Snowflake Blog
  2. Create a mirror, Snowflake Documentation
  3. Query mirrored data, Snowflake Documentation
  4. Troubleshoot mirrors, Snowflake Documentation
  5. Lakebase Change Data Feed, Databricks Documentation
  6. Replicate to the lakehouse, Databricks Documentation
  7. Serve lakehouse data with synced tables, Databricks Documentation

Comments