Comparison
Most of the time, you should not use Trellara.
One PostgreSQL source, one target, both always online, one team owning the schema? Use native logical replication. It is free, it is in the database, it keeps getting better, and it is one fewer thing to operate. This page exists to describe the specific line past which that stops being true — and to be honest about the tools that are better than us on the other side of it.
vs native PostgreSQL logical replication
The default, what PG 16 through 19 added, and the three things it still leaves entirely to you.
verdict: use native until you cannotvs Debezium + Kafka Connect
The closest technical peer. Same protocol, different definition of done.
verdict: Debezium wins on connector breadthvs Striim
The enterprise platform comparison — support, sources and transformation against verification.
verdict: Striim wins on everything commercialvs managed ELT — Fivetran, Airbyte, Estuary
Ingestion, not operations. Different question, occasionally mistaken for the same one.
verdict: buy ELT if the warehouse is the pointvs pgEdge
Distributed Postgres — a different bet about where the guarantee should live.
verdict: pgEdge wins on multi-master writesvs Databricks Lakebase & Neon
The integrated version, and what integration costs you in neutrality.
verdict: buy the platform if you already bought the platformThe full matrix
Every tool on this page against every dimension, in one table.
one screen, no marketing adjectivesWhen not to use Trellara
The itemised list of what we do not have, and the situations where choosing us would be a mistake.
read this one firstNot yet written: AWS DMS, ClickPipes / PeerDB, and Confluent Tableflow. They belong on this page and we have not done the research to compare them honestly, so they are absent rather than guessed at.
Native PostgreSQL logical replication
In-core · free · PG 16–18 shipped, 19 in betapgoutput over the standard
START_REPLICATION protocol — the same
mechanism a subscription uses. Anyone telling you their CDC product
“beats logical replication” is selling you something. The
real question is whether the primitives Postgres gives you add up to an
operating model for the number of databases you actually run.
What core already does well — and it is more every year
Any comparison written against PostgreSQL 14 is dishonest by now. The recent releases have moved directly at the pain CDC vendors used to market against:
Shipped in core
- PG 16 — logical decoding on a standby; parallel apply of large in-progress transactions
- PG 17 — failover slots (
failover = true,pg_sync_replication_slots) so a slot survives a switchover;pg_createsubscriberto convert a physical standby into a subscriber - PG 18 —
idle_replication_slot_timeoutto reap abandoned slots automatically; per-conflict statistics inpg_stat_subscription_stats; generated-column replication;streaming = parallelas the subscription default - PG 19 (beta, unreleased) — sequence synchronization in publications,
EXCEPT TABLEforFOR ALL TABLES, and a dynamiceffective_wal_level. Committed, not yet GA — we are counting it against ourselves early rather than late.
Our stance on that
- A three-to-five year product bet has to assume core keeps improving, and that managed providers keep wrapping those improvements in guardrails. We do.
- So we do not compete with these features — we consume them.
trellara-checkscoreswal_status,safe_wal_size, invalidation reason, failover and synced flags,inactive_since, idle-slot timeout and conflict statistics. - Being the best consumer of new core features is a more durable position than pretending core is static.
- Everything below is a gap that PG 19 will not close either, not a gap that a future release cannot.
What it still leaves to you
1. DDL is not replicated. Schema changes are yours to coordinate by hand, in the right order, across every subscriber. Get it wrong and apply errors until a human intervenes. There is no propagation contract, no per-sink acknowledgement, and no visibility barrier holding back post-DDL rows until the targets have accepted the new schema version.
2. Consumer health is still coupled to your primary's disk.
idle_replication_slot_timeout reaps slots
nobody is using. It does not help with the more common and more
dangerous case: a slot that is connected and slow, or
connected and stuck on a bad record. That slot retains WAL for as long
as it takes. Your two protections are a storage alarm and
max_slot_wal_keep_size — and the second one
protects the primary by invalidating the slot, which means a
full resync of that subscriber. Core's honest offer is: risk the
primary, or lose the destination. Trellara's answer is to acknowledge
the source only after a publish is durable in a log you control, so
the pressure sits on a disk you sized for it.
3. Nothing verifies convergence. Postgres will tell you a subscription is streaming and how far behind it is. It will not tell you the two sides hold the same rows. Confirming that is a row-count and checksum job you write yourself, per table, per environment, and then maintain. Every team we have talked to either wrote one or decided not to look.
4. Bad data stops the subscription. The recovery model is
disable_on_error plus skipping a transaction
by hand with pg_replication_origin_advance —
in production, under pressure, with no record of what was skipped.
There is no quarantine, no replay-ready artifact, and nothing keeping
an unrelated flow moving while you decide.
5. There is no fleet object. Fifty databases means fifty publications, fifty slots, fifty subscriptions and fifty pieces of state, with no way to ask a question about all of them at once. This is the gap that grows fastest with your business, and it is the one core is least likely to close, because it is an operations product rather than a database feature.
6. Reseed is manual, and offline nodes are expensive. A node past retention means drop, re-copy, re-hand-off, by hand. A store that goes dark for a day pins a day of WAL on the source for a day.
7. There is no analytical destination. Logical replication replicates to PostgreSQL. Getting the same committed transactions into Iceberg is a separate product, separate slot, and separate correctness argument.
Use native logical replication when
You have one source and one target, or a small fixed number of both; both sides are always online; the same team owns both schemas; and you would notice within minutes if it stopped. This describes most PostgreSQL deployments, and in that situation adding Trellara is strictly worse — one more process, one more failure mode, no benefit.
The line flips when you add a second source you do not watch daily, a node that goes offline as normal behaviour, a schema owned by a different team, a destination that is not PostgreSQL, or a question you cannot answer today without writing your own checksum job.
Striim
Commercial platform · Striim Cloud & Striim PlatformWhere Striim is straightforwardly better
- Heterogeneous sources. Oracle and SQL Server capture in particular, plus MySQL, MongoDB and mainframe systems. Trellara has PostgreSQL and nothing else, and will not add a second source family until the Postgres wedge is finished.
- Transformation in flight. TQL continuous queries, joins, windowed aggregation and enrichment between source and target. Trellara deliberately has none of this — it moves what Postgres committed, unchanged.
- Connector breadth. 100–150+ prebuilt connectors across databases, SaaS, messaging and cloud warehouses.
- Heterogeneous migration. Zero-downtime database migration between different engines is one of Striim's strongest and most proven use cases. Trellara does not do it.
- Being a vendor. A managed cloud, professional services, support contracts, reference customers and a decade of production deployments. Trellara is a pre-1.0 open-source project.
Where the shapes differ
- The unit of work. Striim's unit is the event flowing through continuous queries and windows. Trellara's protocol unit is the committed source transaction; a partially applied transaction is never observable at a destination. Matters little for a warehouse, a great deal for an operational Postgres target or an agent taking irreversible action.
- The guarantee's shape. Striim documents A1P (at-least-once, the default) versus E1P (exactly-once, on supported targets), and lists non-recoverable readers and targets that can still duplicate after recovery. That is honest, and better than vendors who just print “exactly once” — but it means your guarantee depends on which components you picked. Trellara's contract is uniform: at-least-once delivery, exactly-once effect, because deduplication commits in the same target transaction as the data.
- Proof is a console vs. proof is an artifact. Striim gives dashboards, lag and throughput monitoring, alerting and validation features. Trellara gives a command that returns
CONVERGEDor names the recovery path, plus an exportable evidence package you can archive and diff. - Fleet is a primitive, not a count of pipelines. Two thousand stores in Striim is two thousand applications to operate. In Trellara it is one fleet with one completeness epoch stating which sources are included, through which commit LSN.
- Cost shape. Striim is licensed: a free developer tier, cloud production quoted by sales, self-hosted with connector licensing. Volume-metered pricing has to be modelled before you can size an evaluation. Trellara is Apache-2.0 with no meter — the cost is the engineer who operates it.
- Neutrality. Your pipelines in Striim are TQL running in Striim's runtime. Trellara's envelope is a protobuf IDL carried in the repository, the durable log format is documented frame by frame, and lake output is standard Parquet under your catalog. If you stop using Trellara, nothing becomes unreadable.
The specific question to ask on a Striim evaluation
Not “what is your latency” — both answers will be fine. Ask: “after a broker restart and an applier crash during a multi-table transaction, what command proves to my auditor that the target holds exactly what the source committed?” That separates a monitoring answer from a verification answer.
The fair question back at us: “what happens when the third source turns out to be Oracle?” Call Striim.
Use Striim when
Your sources are heterogeneous — especially Oracle or SQL Server; you need transformation, enrichment or joins between source and destination; you are running a migration between different database engines; you need 100+ prebuilt SaaS connectors; or your organisation requires a vendor with support contracts, a managed service and audited compliance today. These are real requirements and Trellara meets none of them.
Use Trellara when everything is PostgreSQL, there is more than one of it, some of them go offline, and the question that keeps you up is whether they all converged.
Debezium + Kafka Connect
Open source · the closest technical peerWhere Debezium wins
- Maturity and ecosystem — years of production use, an enormous connector catalog, and a community that has already hit your edge case
- Many source databases, not just PostgreSQL
- Kafka-native — if you already run Connect, it slots into infrastructure and skills you have
- Vendor-supported distributions available if you need someone to call
Where we differ
- Transaction metadata is optional and side-channel in Debezium — a separate topic, with the reassembly burden on every consumer. In Trellara the transaction is the protocol boundary.
- No broker to start. Debezium's first run needs a Kafka Connect cluster. Trellara's first verified flow runs against a local disk-backed log. Kafka becomes the scale-out option, not the entry fee.
- The apply side is yours. A JDBC sink connector plus SMTs is not atomic transaction apply, and it is not a reseed or a quarantine workflow.
- Correctness as a published artifact. A deterministic failure matrix that runs in CI and ships in the binary, rather than a reliability claim in documentation.
Use Debezium when
You already operate Kafka Connect, you need sources beyond PostgreSQL, or you want the largest connector ecosystem in open source and are content to assemble the apply, verification and recovery layers yourself.
Fivetran, Airbyte, Estuary
Managed ingestion to the warehouseThe divergence shows up in three places. Direction: they move source → warehouse; they do not apply back into an operational PostgreSQL target atomically. Scale shape: connector-per-source pricing and configuration is comfortable at ten sources and untenable at a thousand — this is the specific reason we scoped the second pillar as fleet fan-in rather than single-source ingestion, where the market is already commoditised. Completeness: they will tell you a sync succeeded. They will not tell you which of your two thousand stores are represented in last night's table, through which commit LSN.
Worth noting honestly: Airbyte's own documentation warns that if
max_slot_wal_keep_size is exceeded PostgreSQL
can invalidate the slot and force a full resync — which is a fair and
public statement of the exact problem our first command exists to
detect early.
Use managed ingestion when
Your destination is a warehouse, your source count is in the tens, analytics is the use case, and you would rather pay a subscription than operate anything.
pgEdge
Distributed PostgreSQL distributionWhere pgEdge wins
- Automatic DDL replication, which native logical replication and Trellara both leave to a coordinated process
- Multi-region active-active writes — genuinely hard, genuinely solved, and something Trellara does not attempt
- One system rather than a database plus a replication layer
Where we differ
- You adopt their distribution. That rules out RDS, Aurora, Cloud SQL and Azure Flexible Server — where most of the market's PostgreSQL actually runs. Trellara works with the Postgres you already have.
- Multi-master brings a conflict-resolution model you must reason about forever. Hub-and-spoke with an explicit ordering contract is a smaller commitment.
- No analytical destination. pgEdge distributes Postgres; it does not fan a fleet into Iceberg with a completeness statement.
- No convergence verification as a product surface.
Use pgEdge when
You control the PostgreSQL distribution across your estate and you genuinely need multi-region active-active writes rather than hub-and-spoke synchronisation.
Databricks Lakebase & Neon
The integrated version of this thesisWhere that trade stops being obvious: data residency and cloud choice, where your object storage and catalog have to stay yours; the Postgres you already run, which an integrated platform would rather replace; and coupling — an integrated stack ties your operational database's fate to a lakehouse vendor's roadmap. Trellara lands standard Parquet in your object storage under your catalog, readable by Spark, Trino, DuckDB or anything else.
There is a structural reason we lead with the licence. Every independent PostgreSQL change-movement company so far has been absorbed by a destination platform: PeerDB into ClickHouse, Mooncake and Neon into Databricks, Sequin acquired with its cloud shut down in October 2025. The layer underneath consolidated too — IBM closed its $11bn acquisition of Confluent in March 2026, and already owned Debezium through Red Hat. Apache-2.0 with an open protobuf wire schema and a documented on-disk format is not marketing; it is the only structural answer to that pattern that survives an acquisition of us.
Use the integrated platform when
Your organisation has already standardised on one lakehouse vendor, has no residency or cloud-choice constraint, and values a single supported experience over portability.
The full matrix
● yes · ◐ partial or assembled · ○ noRead the rows where you would say “○” hurts. If none of them do, you have your answer and it is not us.
| Capability | Trellara | Native logical rep. | Striim | Debezium + Connect | Fivetran / Airbyte |
|---|---|---|---|---|---|
| Category | Verification & fleet operations for Postgres | Database feature | General streaming integration platform | Change capture toolkit | Managed warehouse ingestion |
| Non-PostgreSQL sources | ○ Postgres only, deliberately | ○ | ● Oracle, SQL Server, MySQL, Mongo, mainframe | ● many | ● hundreds |
| Runs on managed Postgres RDS · Cloud SQL · Azure |
● no extension required | ● | ● | ● | ● |
| Infrastructure to run the first flow | ● tiny diagnostic first, no broker | ● nothing — it is in the database | ◐ platform cluster or cloud tenancy | ◐ Kafka + Connect cluster | ● SaaS |
| Transaction boundary preserved end to end | ● mandatory protocol unit | ● within one subscription | ◐ event/stream oriented | ◐ optional, separate topic | ○ row batches |
| Duplicate handling model | ● at-least-once delivery, exactly-once effect — dedup commits with the data | ● handled in-core | ◐ A1P default; E1P on supported targets only | ◐ at-least-once; sink-dependent | ◐ connector-dependent |
| Source-safety assessment before you start | ● read-only, graded, 60 seconds | ○ catalog views, interpreted by you | ○ | ○ | ○ |
| WAL retention pressure moved off the primary | ● durable log you size and own | ○ slot holds WAL until the consumer catches up | ◐ platform buffers, still slot-backed | ◐ Kafka buffers, still slot-backed | ○ |
| Convergence verification as a command | ● counts, PK checksums, watermarks — whole flow or one table | ○ write it yourself | ◐ validation features and dashboards | ○ | ○ |
| Exportable evidence package for a review | ● convergence evidence, drills, contract tests, failure matrix | ○ | ○ screenshots of a console | ○ | ○ |
| Bad data behaviour | ● quarantine with a replay command; other flows keep moving | ○ subscription errors; skip by hand | ◐ exception handling and alerts | ◐ dead-letter queue, then it is yours | ◐ sync fails, retried |
| Automated reseed with a verified handoff | ● snapshot state machine + verified handoff | ○ manual | ◐ re-run initial load | ◐ incremental snapshot | ◐ full resync |
| Schema drift as a policy contract | ● pinned fingerprints, DDL classification, propagation barrier with per-sink acks | ○ DDL not replicated | ◐ automated schema evolution | ◐ schema history topic | ◐ auto-propagate or fail |
| Fleet as a first-class object | ◐ config, reporting and scorecards today; fleet runtime in progress | ○ N independent subscriptions | ○ N applications | ○ N connectors | ○ N sources, priced per source |
| Fleet completeness statement “which sources are in last night's number” |
◐ epoch decisions and fan-in verify ship; production Iceberg writer in progress | ○ | ○ | ○ | ○ |
| Public deterministic failure matrix | ● 63 scenarios in CI and in the binary | ◐ the PostgreSQL test suite | ○ | ◐ extensive but not packaged as a claim | ○ |
| Transformation in flight | ○ deliberately none | ○ row filters only | ● TQL streaming SQL | ◐ SMTs | ◐ post-load dbt |
| Licensing | ● Apache-2.0, open protobuf wire schema | ● PostgreSQL licence | ○ commercial | ● Apache-2.0 | ◐ commercial / ELv2 |
| Managed cloud & support SLA | ○ none today | ◐ via your Postgres provider | ● Striim Cloud + enterprise support | ◐ via vendor distributions | ● |
| Maturity | ○ pre-1.0, design partners | ● in-core since 2017 | ● a decade in production | ● years, very widely deployed | ● |
When not to use Trellara
Comparison pages that only list the author's strengths are worth nothing to the person reading them. Here is the list we would want if the positions were reversed. The itemised evidence version — what we have established and what we have not — is on the homepage, and the docs restate it in When not to use it.
- No sources other than PostgreSQL. No Oracle, no SQL Server, no MySQL, no MongoDB — and none planned until the Postgres wedge is proven.
- No transformation, enrichment, or joins. If you need to reshape data between source and destination, that is a different product and we are not it.
- No managed cloud and no support SLA. You run it. If something breaks at 3 a.m., there is no number to call.
- No SOC 2, ISO 27001, or third-party correctness audit. A Jepsen-style independent analysis is something we want and have not commissioned.
- Pre-1.0, with no long-running production deployments we can point you to. The failure matrix is strong evidence; it is not the same thing as five years of other people's uptime.
- The lakehouse writer is narrower than the story. Append-only raw changelog, Iceberg REST catalog, S3-compatible storage. No native equality or position deletes, no native current-state or SCD2 mutation — those are Spark templates you run.
- The fleet runtime is not finished. Fleet configuration, reporting and scorecards ship; a continuously running multi-source fleet control loop does not yet.
- A large command surface. There are many more commands than a first-time user should have to meet, and collapsing that to one legible path is active work.
- No tagged release, and no signed artifacts. Binaries carry SHA-256 checksums. There is no
v0.1.0tag to pin, no SBOM, and no build-provenance attestation. - No PostgreSQL version matrix in CI for the default path. The optional native extension has a live four-major lane — CI installs it on PostgreSQL 15, 16, 17 and 18 and runs a crash and acknowledgement suite against each. The external relay, which is the path most evaluations will actually deploy, has none: its PostgreSQL integration tests are environment-gated and only PG 16 has been exercised end to end, by hand.
- The optional native extension is not for managed Postgres, and its support claim is unsettled. It needs
shared_preload_libraries, which RDS, Aurora, Cloud SQL, Azure and Neon will not grant you. It does not support two-phase commit — every prepared-transaction callback fails closed rather than silently dropping changes. And CI builds and packages it for PG 15–18 while the runtime release contract advertises 17–18. We have not reconciled the two, so read 15 and 16 as build coverage, not a support promise. - Recovery has never been timed. 63 scenarios prove it converges. None of them measures how long it takes, and there has been no soak run.
- A small team. Weigh that the way you would weigh it for anyone.
Sources
Vendor and project claims on this page are drawn from public documentation. Where a competitor's behaviour is characterised, it is characterised from their own docs.
- PostgreSQL logical replication and its documented restrictions
- PostgreSQL logical replication failover · replication configuration parameters
- PostgreSQL 19 logical replication improvements · sequence synchronisation preview
- Logical replication improvements in Amazon RDS for PostgreSQL 18
- Azure Database for PostgreSQL — logical replication and slot retention risk
- Striim — Postgres CDC guide · Striim — recovering applications (A1P vs E1P) · Striim TQL
- Debezium PostgreSQL connector and transaction metadata
- Airbyte PostgreSQL source — slot invalidation and full resync · Fivetran PostgreSQL connector
- Neon and Lakebase · Databricks and Electric/PGlite
Competitor capabilities change. If something here is out of date or unfair, tell us and we will correct it — hello@trellara.io.
Still the right question
The first step is read-only and takes sixty seconds.
Whatever you end up choosing, running trellara-check
against a production source tells you something true about your own
system — slot posture, WAL headroom, capture readiness — and it creates
nothing.