Based on our testing of 30 PostgreSQL ETL tools, Estuary is the best ETL tool for PostgreSQL for 2026 because it streams inserts, updates and deletes from the write-ahead log on every major managed Postgres host, writes back into Postgres too, and bills per GB with a free 10 GB tier.
Below, I’ll compare how each tool reads Postgres, whether it catches deletes, what it really costs on a busy table, and the replication-slot settings to get right on day one.
We rebuilt our 2019 list from scratch for this update. Blendo is gone: its acquirer, RudderStack, shut the inherited ETL pipelines on January 10, 2026. Xplenty now runs as Integrate.io, and Stitch has had no Postgres changelog entry since July 2021 while Qlik steers customers toward Qlik Talend Cloud. Fivetran is the only 2019 pick still in our top 11 (it completed its dbt Labs merger on June 1, 2026), while pglogical and Singer now sit in the loading section below.
Key Takeaways 🔍
- Estuary leads with log-based CDC across major Postgres hosts and per-GB pricing starting with a free 10 GB tier
- Paid plans run from $20 a month for Airbyte Cloud to $12,000 a month for dltHub, while Estuary, Fivetran and the cloud services bill by usage
- Log-based CDC captures deletes; Airbyte’s xmin and cursor modes and Hevo’s XMIN mode miss them
- Debezium and dlt are free under Apache 2.0; Airbyte Core is free to self-host but source-available under ELv2
- Choose Fivetran for managed Postgres plus 700+ connectors, with PostgreSQL 10 to 18 support across major hosts
PostgreSQL ETL Tools Comparison Table
Here are our 11 picks side by side, including how each one reads Postgres and whether deletes reach your destination:
| Tool | Best for | How it reads Postgres | Deletes captured | Hosting | Starting price | Free plan or trial |
|---|---|---|---|---|---|---|
| Estuary | Real-time CDC in both directions | Log-based CDC (pgoutput slot); batch connector too | Yes | Managed cloud; Private or BYOC on Enterprise | $0.50/GB + $100/connector a month | Free up to 10 GB/month; 30-day Cloud trial |
| Fivetran | Hands-off managed ELT | Logical replication (pgoutput) or Query-Based | Yes with logical replication; optional on Query-Based | Managed cloud; hybrid on Enterprise | Usage-based MAR; $5 minimum per connection | Free up to 500,000 MAR; 14-day trial per connection |
| Airbyte | Self-hosted ELT | CDC (pgoutput, PostgreSQL 14+), xmin or cursor | CDC only | Self-hosted Core, Cloud or hybrid | Free Core; Cloud from $20/month | Free Core; 14-day Cloud trial |
| Debezium | Open-source CDC | pgoutput or decoderbufs logical decoding | Yes | Self-hosted: Kafka Connect, Server or Engine | Free (Apache 2.0) | Free open source |
| Hevo Data | No-code CDC | Logical replication (pgoutput) or XMIN | Logical replication only | Managed cloud | $299/month ($265 billed annually) | 14-day trial |
| dlt | Python teams | pg_replication (pgoutput) or SQL queries | With pg_replication | Python library, runs anywhere | Free; dltHub $12,000/month | Free open source; 14-day dltHub trial |
| AWS DMS | AWS shops | Logical replication (test_decoding or pglogical) | Yes, on tables with a primary key | AWS managed | $0.0186/hour (dms.t3.micro, us-east-1) | AWS Free Tier credits |
| Google Datastream | BigQuery | pgoutput logical decoding | Yes | Google Cloud managed | $2.00/GiB of CDC | 500 GiB free backfill monthly; free AlloyDB tier |
| PeerDB | ClickHouse | pgoutput logical replication | Yes, as flagged rows | Self-hosted or ClickHouse Cloud | Free self-hosted; $0.20/GB CDC on ClickPipes | Free self-hosted; $300 ClickHouse Cloud credits |
| Sling | Loading data into Postgres | Incremental queries; WAL-based CDC on paid plans | Paid CDC only | CLI or self-hosted agents | Free CLI; Pro $79/month | Free CLI; 7-day Pro trial |
| Skyvia | Budget no-code | Timestamp-based incremental | No hard deletes | Managed cloud | Free; Basic $79/month billed annually | Free plan: 10,000 records/month |
How PostgreSQL ETL Tools Read Your Data: Cursor, xmin or CDC
PostgreSQL, aka Postgres, is recognized as “the world’s most advanced open source relational database.” But you may be less familiar with the relational database’s use as a data warehouse. In fact Amazon Redshift’s design was largely based on Postgres.
Organizations often find themselves using Postgres as an ETL data source and data sink. As in any data operation, an ETL (extract, transform, and load) is how data gets moved from one place to another. There are many ETLs that can work with PostgreSQL on-premises or on the cloud. Some ETLs pull data into PostgreSQL, some move data out, and some can do both those functions.
Most picks below follow ELT: load raw rows first, then transform inside the warehouse. That’s the difference between ETL and ELT, but your shortlist depends more on how they read Postgres:
- Cursor (key-based) sync: Queries rows whose
updated_ator ID passed the saved value, a form of incremental loading. Updates need a reliable modification column; this method never sees hard deletes. - xmin sync: Reads Postgres’s hidden transaction ID column without WAL setup. However,
xmincan’t be indexed, so runs scan the whole table, and deleted rows take their transaction IDs with them. - Log-based CDC: Reads WAL through a replication slot, usually with a publication and
pgoutput. It captures inserts, updates and deletes. Enablewal_level=logical,rds.logical_replication=1plus a reboot on RDS/Aurora, orcloudsql.logical_decoding=onplus a restart on Cloud SQL.
A replication slot retains WAL until its consumer confirms progress. The max_slot_wal_keep_size default of -1 means unlimited WAL retention, so a stalled consumer can fill your disk. Capping retention protects storage but risks slot invalidation and a full re-snapshot. PostgreSQL 17 added failover slots that can follow a promoted standby, while PostgreSQL 18 adds idle_replication_slot_timeout to invalidate abandoned slots automatically.
1. Estuary: Best Overall
- Estuary pricing: Free up to 10 GB a month and 2 connectors; Cloud $0.50 per GB plus $100 per connector instance a month
- Postgres capture: Log-based CDC with deletes on PostgreSQL 10+, plus a batch connector for hosts without logical replication
- Deployment: Managed cloud in the US or EU, with Private and BYOC on Enterprise; Business Source License
Estuary wins because it captures WAL across major managed Postgres hosts, backfills alongside streaming changes, and writes into Postgres at predictable per-GB rates. However, data is metered at capture and again at delivery, and its connector catalog is smaller than Fivetran’s.
Pros
- ✔️ Log-based CDC with deletes on PostgreSQL 10+
- ✔️ Postgres as both source and destination
- ✔️ Free Developer tier: 10 GB monthly, 2 connectors
Cons
- ❌ Data metered at capture and again at delivery
- ❌ 200+ connectors against Fivetran’s 700+
- ❌ Lost replication slot requiring backfill or reset
What’s new with Estuary? ⬇️
Estuary Flow became Estuary in March 2026, with pricing and contracts unchanged. The rename followed a $17 million Series A led by M13 the previous October.
Why use Estuary in 2026? ⬇️
Captured data stays in your storage bucket, so another warehouse backfills without touching Postgres again. Plus, PostgreSQL 16+ standby capture keeps CDC reads off your primary.
My Estuary testing notes ⬇️
When I pointed Estuary at an RDS instance, the capture needed rds.logical_replication=1 plus a reboot, a user with the REPLICATION attribute, a publication, a replication slot and a watermarks table (a read-only capture swaps the watermarks table for a heartbeat table). Keyless tables get walked by ctid, so add primary keys first. And if a stalled capture loses its slot, the XID backfill that gets you running again misses deletes. So make sure you set max_slot_wal_keep_size before capture, starting with Estuary’s suggested 50 GB, and drop the slot when retiring it.
How Much Does Estuary Cost?
Moving 100 GB of monthly changes from Postgres to Snowflake costs about $300 monthly, including both connectors and double-metered data.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Developer | Free | Up to 10 GB/month | 2 connector instances; no card |
| Cloud | $0.50/GB + $100/connector monthly; $50 from seventh | GB at capture and each delivery | 200+ connectors; US/EU; 30-day trial |
| Enterprise | Custom; request quote | Annual quote | Private/BYOC, SSO, SOC 2 report, HIPAA BAA |
2. Fivetran: Best Fully Managed ELT
- Fivetran pricing: Free up to 500,000 MAR a month; paid plans bill each connection by monthly active rows, with a $5 minimum per connection
- Postgres capture: Logical replication (pgoutput) with deletes, or Query-Based sync; PostgreSQL 10 to 18
- Deployment: Managed cloud, with hybrid deployment on Enterprise; proprietary
Fivetran wins for hands-off ELT because it combines broad Postgres host support with hundreds of managed SaaS connectors. Logical replication captures deletes on keyed tables. However, deletes now count toward paid MAR on pay-as-you-go, so compare high-churn workloads with Estuary’s volume pricing.
Pros
- ✔️ 700+ managed connectors and unlimited users
- ✔️ PostgreSQL 10 to 18 across major hosts
- ✔️ Free plan up to 500,000 MAR monthly
Cons
- ❌ Deletes and history-mode changes billed as MAR
- ❌ $5 minimum per qualifying paid connection
- ❌ One-minute syncs only on Enterprise and above
What’s new with Fivetran? ⬇️
Fivetran completed its dbt Labs merger in June 2026 after acquiring Tobiko Data. Its connector supports PostgreSQL 18 and pg_failover_slots for PostgreSQL 11 to 16.
Why use Fivetran in 2026? ⬇️
To minimize load on your systems, Fivetran reads logs of your changes instead of querying your live data. Logical replication supports PostgreSQL 16+ read replicas, and initial historical loads don’t count toward MAR.
My Fivetran testing notes ⬇️
I choose Logical Replication on Aurora when deletes matter, rather than relying on Query-Based’s optional delete capture. Adding a column with DEFAULT produces no WAL for existing rows, so replication can’t backfill that value without a re-sync. History mode also bills additional row versions, so choose soft delete mode if you don’t need every past version.
How Much Does Fivetran Cost?
Each connection gets a 14-day free trial, and annual contracts save up to 22%; request a quote for unpublished enterprise rates.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Free | $0 | Up to 500,000 MAR/month | 15-minute syncs; 5,000 model runs |
| Standard | Usage-based | MAR/connection; $5 minimum at 1 to 1M MAR | 15-minute syncs; unlimited users |
| Enterprise | Rates not published | MAR/connection; request quote | One-minute syncs; hybrid |
| Business Critical | Rates not published | MAR/connection; request quote | Customer-managed keys; private networking; PCI DSS Level 1 |
3. Airbyte: Best for Self-Hosting
- Airbyte pricing: Core free to self-host; Cloud Standard from $20 a month and Plus from $189 a month
- Postgres capture: CDC (pgoutput) with deletes on PostgreSQL 14+, plus xmin and cursor modes that miss deletes
- Deployment: Self-hosted Core (Elastic License 2.0, source-available), Cloud, or hybrid Enterprise Flex
Airbyte wins for self-hosting because Core runs the certified Postgres connector on your infrastructure with no license fee. Cloud offers a managed fallback. However, CDC requires PostgreSQL 14 or later, and Core is source-available under Elastic License 2.0, so choose Debezium if you need an Apache license.
Pros
- ✔️ Free Core with the certified Postgres connector
- ✔️ CDC,
xminand cursor modes - ✔️ Cloud Standard from $20 monthly
Cons
- ❌ CDC requiring PostgreSQL 14 or later
- ❌ Elastic License 2.0, not OSI open source
- ❌ Full resync after slot invalidation
What’s new with Airbyte? ⬇️
Airbyte’s Debezium engine upgrade dropped CDC for PostgreSQL 13 and earlier. The certified Postgres connector is now on version 3.8.11.
Why use Airbyte in 2026? ⬇️
Airbyte recommends CDC for deletes, databases above 500 GB or missing cursor columns. Otherwise, xmin avoids WAL setup, but it cannot track deleted rows.
My Airbyte testing notes ⬇️
I installed Core with abctl on a machine sized to Airbyte’s recommended 4 CPUs and 8 GB of RAM, then gave each Postgres source its own dedicated slot. If retained WAL exceeds max_slot_wal_keep_size, the slot can become invalid and require a full resync. So make sure you alert on slot lag and drop airbyte_slot when retiring its connection.
How Much Does Airbyte Cost?
The 14-day Cloud trial includes 400 credits; size your package from metered database sync volume, not stored table size.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Core | Free | Your infrastructure | ELv2; full connector catalog |
| Standard | From $20/month | Credits; 5 included, about 1 GB | Hourly syncs; standard support |
| Plus | From $189/month | 40 credits; packages to 2,000 for $4,999 | 15-minute syncs; SSO; 2 workspaces |
| Pro / Enterprise Flex | Not published; request quote | Data Worker capacity | Faster syncs / hybrid deployment |
4. Debezium: Best Open-Source CDC
- Debezium pricing: Free under Apache 2.0; you pay for the Kafka Connect or Debezium Server hosting and the engineers who run it
- Postgres capture: pgoutput or decoderbufs logical decoding with deletes; incremental and blocking snapshots via a signal table
- Deployment: Kafka Connect, Debezium Server (Java 21+) or an embedded Java engine
Debezium wins for open-source CDC because its Apache-licensed connector emits row changes as events and supports PostgreSQL failover slots. However, it only captures changes: you operate the runtime and destination integration yourself, while Estuary manages that pipeline.
Pros
- ✔️ Apache 2.0 license without fees
- ✔️ Failover-enabled slots on PostgreSQL 17+
- ✔️ Ad hoc incremental snapshots through signals
Cons
- ❌ Self-operated Kafka Connect or Debezium Server
- ❌ Unchanged TOAST values arriving as placeholders
- ❌ At-least-once delivery requiring duplicate handling
What’s new with Debezium? ⬇️
Debezium’s 3.4 series added PostgreSQL 18 support. The stable release is now 3.7.1.Final, while the next development series remains in alpha.
Why use Debezium in 2026? ⬇️
Debezium’s outbox router suits application events as well as analytics feeds. Its JDBC sink can write events into another Postgres, with destination configuration still yours.
My Debezium testing notes ⬇️
The first thing I hit with Debezium was a quiet database sharing a busy server, where the slot stops advancing until you set heartbeat.interval.ms and add the heartbeat table to the publication. Then there’s TOAST: with REPLICA IDENTITY DEFAULT, unchanged large values arrive as placeholder strings that a careless sink writes literally. Use REPLICA IDENTITY FULL selectively for complete large-text or JSON values, because it raises WAL volume.
How Much Does Debezium Cost?
Debezium has no paid software tier, but you still need a budget for hosting and the engineers responsible for recovery.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Debezium | $0 | Apache 2.0 license | Connectors; Connect, Server and Engine |
| Runtime and messaging | Variable | Your infrastructure | Hosting and messaging |
| Engineering and maintenance | Variable | Team time | Monitoring, upgrades, slot and offset recovery |
5. Hevo Data: Best No-Code CDC
- Hevo pricing: Starter $299 a month ($265 billed annually); Professional $849 a month ($750 billed annually); 14-day free trial
- Postgres capture: Logical replication (pgoutput) with deletes on PostgreSQL 10 to 18; XMIN mode misses deletes
- Deployment: Managed cloud, with VPC peering on Enterprise; proprietary
Hevo Data wins for no-code CDC because form-driven pipelines combine pgoutput replication with fixed event tiers. However, Starter costs $299 a month and only schedules hourly, while Skyvia starts free if you can live with timestamp-based replication that misses hard deletes.
Pros
- ✔️ Published fixed event tiers
- ✔️ Logical replication with deletes on PostgreSQL 10 to 18
- ✔️ dbt integration from Starter
Cons
- ❌ No free tier
- ❌ Hourly scheduling on Starter
- ❌ XMIN mode missing deletes and scanning tables
What’s new with Hevo? ⬇️
Hevo offers unlimited-volume pricing per pipeline alongside event tiers, while older Postgres pipelines move to pgoutput. Hevo claims its Fivetran migration program cuts total cost by 40%.
Why use Hevo in 2026? ⬇️
Replicated deletes count as updates, so size your event tier from actual churn. Our Hevo vs Meltano comparison covers managed pipelines versus self-operated Singer integrations.
My Hevo testing notes ⬇️
I choose logical replication for mutable tables because XMIN never sees deletes and its unindexable column requires whole-table scans. Hevo’s standby capture also requires supported RDS or Azure instances on PostgreSQL 16 to 18. So make sure you enable logical replication before building the pipeline, rather than treating XMIN as an equivalent substitute.
How Much Does Hevo Cost?
Hevo offers no free tier, so use its card-free 14-day trial to establish event consumption before choosing a package.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Starter | From $299/month; $265/month billed annually | 5M, 20M or 50M events/month | Hourly scheduling; 10 users; dbt |
| Professional | From $849/month; $750/month billed annually | 20M, 50M or 100M events/month | Unlimited users; APIs; reverse SSH |
| Enterprise | Not published; request quote | Fixed price/pipeline, unlimited volume | Streaming; SSO; RBAC; VPC peering |
6. dlt: Best for Python Teams
- dlt pricing: Free open-source library; managed dltHub costs $12,000 a month on a 12-month minimum
- Postgres capture: pg_replication source reads pgoutput logical replication with deletes; sql_database for query-based loads
- Deployment: Apache 2.0 Python library that runs anywhere Python runs, with Postgres as a destination too
dlt wins for Python teams because one library reads Postgres through queries or logical replication and loads supported destinations without per-row billing. However, scheduling and slot management remain yours, and dltHub’s managed tier is substantially more expensive than Airbyte Cloud.
Pros
- ✔️ Free Apache 2.0 library without row limits
- ✔️ Logical replication source capturing deletes
- ✔️ Postgres destination with merge,
scd2andcdc
Cons
- ❌ Python required for every pipeline
- ❌ Self-managed scheduling, alerts and slots
- ❌ No managed tier between free and $12,000 monthly
What’s new with dlt? ⬇️
dlt 1.32.0 shipped in October 2026. Paid dltHub combines a managed runtime with data quality checks and an AI harness for coding agents.
Why use dlt in 2026? ⬇️
You can add dlt to an existing Airflow or Dagster workflow. Schema inference handles incoming structure, while schema contracts can stop bad loads before delivery.
My dlt testing notes ⬇️
I run init_replication once to create the publication and slot, then use pg_replication for initial rows and subsequent changes. This is batch CDC, not streaming, so progress depends on your scheduler. For large query-based tables, configure backend="pyarrow" where appropriate, and schedule CDC runs frequently enough to keep the slot moving.
How Much Does dlt Cost?
dltHub’s 14-day trial includes $30 in credits without a card, and the free library works independently of the managed platform.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| dlt | $0 | Self-run compute | Apache 2.0; unlimited pipelines |
| dltHub | $12,000/month | 12-month minimum, billed monthly; 5,000 credits/month | Runtime, scheduling, quality checks, AI harness |
| Enterprise | Not published; request quote | Annual contract | RBAC, compliance logging, SLA |
7. AWS DMS: Best for AWS Shops
- AWS DMS pricing: From $0.0186 an hour (dms.t3.micro, us-east-1); DMS Serverless $0.0819 per DCU-hour
- Postgres capture: Logical replication through test_decoding or pglogical; full load plus CDC on PostgreSQL 9.4+
- Deployment: Managed AWS service; Postgres works as both a source and a target
AWS DMS wins for AWS shops because full load plus CDC starts at cents per hour, with Postgres supported in both directions. However, it ignores updates and deletes on keyless tables, so compare Estuary or Fivetran when you can’t control the source schema.
Pros
- ✔️ Replication instances from $0.0186/hour
- ✔️ Postgres as source and target
- ✔️ Serverless option without minimum fees
Cons
- ❌ Missing updates and deletes on keyless tables
- ❌ Superuser requirement for self-managed CDC
- ❌ Slow or truncated LOB handling, depending on mode
What’s new with AWS DMS? ⬇️
RDS for PostgreSQL joined Aurora in offering zero-ETL to Redshift, reaching general availability in July 2025. New AWS accounts also moved to credit-based Free Tier benefits.
Why use AWS DMS in 2026? ⬇️
Eligible Aurora and RDS zero-ETL integrations remove the separate pipeline for Redshift. DMS covers other replication needs, including one-time migrations into RDS PostgreSQL.
My AWS DMS testing notes ⬇️
On RDS, I set rds.logical_replication=1 and reboot before configuring DMS, which uses pglogical when installed and otherwise selects test_decoding. DMS ignores UPDATE and DELETE records on keyless tables without failing the task, while long transactions delay CDC progress. Monitor CDCLatencyTarget, and make sure every captured table has a primary key before starting.
How Much Does AWS DMS Cost?
AWS bills DMS by runtime rather than rows, with the following us-east-1 rates excluding separately charged storage.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| On-demand instance | $0.0186/hour (t3.micro) to $0.176/hour (r5.large/r6i.large) | Instance-hour, us-east-1 | GP2 single-AZ storage extra: $0.115/GB-month |
| Serverless | $0.0819/DCU-hour | Single-AZ; Multi-AZ doubles rate | 1 to 384 DCU; 2 GB RAM/DCU |
| Free Tier | $100 plus up to $100 credits | Eligible new AWS accounts | Credits toward usage; older-account terms differ |
8. Google Datastream: Best for BigQuery
- Datastream pricing: CDC from $2.00 per GiB, falling to $0.80 above 10,000 GiB a month; first 500 GiB of backfill free each month
- Postgres capture: pgoutput logical decoding with deletes on PostgreSQL 10+, from Cloud SQL, AlloyDB, RDS, Aurora or self-hosted
- Deployment: Managed Google Cloud service writing to BigQuery, Cloud Storage or Apache Iceberg (not Postgres)
Google Cloud Datastream wins for BigQuery because it delivers serverless Postgres CDC without connector infrastructure. However, Google says processed bytes can multiply your data size. Unlike Estuary, Datastream cannot write into Postgres or read Azure Database for PostgreSQL.
Pros
- ✔️ Serverless CDC into BigQuery
- ✔️ Cloud SQL, AlloyDB, RDS and Aurora sources
- ✔️ 100 GiB free monthly CDC from AlloyDB
Cons
- ❌ Processed bytes up to 5 times source size
- ❌ No Postgres destination
- ❌ No Azure Database for PostgreSQL source
What’s new with Datastream? ⬇️
Datastream supports Apache Iceberg alongside BigQuery and Cloud Storage. Its perpetual free CDC tier covers eligible AlloyDB-to-BigQuery replication, not every Postgres source.
Why use Datastream in 2026? ⬇️
Datastream writes periodic WAL heartbeat messages on primaries to help slots advance when the captured database is quiet. You still need to monitor slot lag.
My Datastream testing notes ⬇️
On Cloud SQL, I enable cloudsql.logical_decoding=on and schedule the required restart before creating the Datastream connection. Each stream uses one replication slot, so a large transaction can delay unrelated tables sharing it. If a table churns far more than the rest, give it its own stream from day one.
How Much Does Datastream Cost?
These us-central1 rates bill processed bytes, which Google says can reach 2 to 5 times your source data size.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| CDC | $2.00/GiB to 2,500; $1.50 to 5,000; $1.20 to 10,000; $0.80 above | GiB/month/billing account | Inserts, updates and deletes |
| Backfill | First 500 GiB free; then $0.40/GiB | GiB/month | Historical loading |
| Free tier | 100 GiB CDC/month | AlloyDB/Spanner to BigQuery, per account | Ongoing eligible CDC |
9. PeerDB: Best for ClickHouse
- PeerDB pricing: Free to self-host (AGPL-3.0); managed as ClickPipes at $0.20 per GB of CDC and $0.10 per GB of initial load, plus $0.10 to $0.20 an hour of compute
- Postgres capture: pgoutput logical replication with parallel snapshots; deletes land as flagged rows in ClickHouse
- Deployment: Self-hosted (Docker or Kubernetes) or ClickHouse Cloud; ClickHouse and Postgres are the maintained destinations
PeerDB wins for ClickHouse because its parallel CTID-block snapshots support large initial loads, followed by direct CDC. ClickHouse Cloud runs it through ClickPipes. However, Snowflake, BigQuery and Kafka destinations are deprecated, making Estuary the better mixed-warehouse choice.
Pros
- ✔️ Parallel snapshots for large Postgres tables
- ✔️ Free AGPL-3.0 self-hosted engine
- ✔️ Managed ClickPipes with per-GB billing
Cons
- ❌ Deprecated Snowflake, BigQuery and Kafka destinations
- ❌ No connection poolers for CDC
- ❌ Unsupported column type changes
What’s new with PeerDB? ⬇️
PeerDB switched from ELv2 to AGPL-3.0 licensing in January 2026. Its managed Postgres CDC ClickPipe has been generally available since May 2025.
Why use PeerDB in 2026? ⬇️
ClickPipes adds CDC to your existing ClickHouse Cloud service. Self-hosted PeerDB can also replicate Postgres to Postgres, but doesn’t migrate indexes, constraints or triggers.
My PeerDB testing notes ⬇️
I connect ClickPipes directly because PgBouncer, RDS Proxy and Supabase Pooler are unsupported for CDC. Deletes become flagged rows in ReplacingMergeTree, and duplicates stay visible until background merges finish. So make sure analyst views use FINAL and _peerdb_is_deleted = 0, rather than treating raw destination rows as the current source state.
How Much Does PeerDB Cost?
ClickPipes compute is shared across a service’s CDC pipes and keeps billing while paused, making it significant at low change volumes.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Self-hosted | Free | AGPL-3.0; your infrastructure | Temporal, catalog and MinIO operated by you |
| ClickPipes data | $0.10/GB load/resync; $0.20/GB CDC | Raw replication-stream bytes | Every ClickHouse Cloud tier |
| ClickPipes compute | $0.10/hour Basic; $0.20/hour Scale/Enterprise | Shared service-hour | 0.5 or 1 CU; approximately $73/$146 monthly |
10. Sling: Best Postgres Loader
- Sling pricing: Free CLI (GPL-3.0); CLI Pro $79 and Pro Max $149 a month; Platform Standard $99 and Advanced $249 a month
- Postgres support: Postgres as source and destination; incremental loads by update key; WAL-based CDC on Pro Max or Platform Advanced
- Deployment: Single Go binary or self-hosted Platform agents; no Sling-hosted agents yet
Sling wins as a Postgres loader because one binary copies files and databases through version-controlled YAML, without row metering. However, CDC requires a paid plan and runs as scheduled micro-batches, so choose Estuary for continuous streaming.
Pros
- ✔️ Free GPL-3.0 CLI with five load modes
- ✔️ Version-controlled replication YAML
- ✔️ Flat pricing without volume metering
Cons
- ❌ CDC requiring Pro Max or Platform Advanced
- ❌ Scheduled micro-batch CDC
- ❌ Engine-pair-specific type mapping checks
What’s new with Sling? ⬇️
Sling CLI v1.6.7 shipped in November 2026. Earlier releases added external secret references, keeping production credentials out of committed replication YAML.
Why use Sling in 2026? ⬇️
Sling reuses dbt connection profiles and stages loads in temporary tables. That keeps connection settings reusable, although you still operate its execution environment.
My Sling testing notes ⬇️
I store connections with sling conns set and define a primary key and update_key in replication.yaml. Full-refresh drops and recreates the target, whereas truncate preserves grants and DDL. Incremental runs skip rows at or below the watermark unless custom SQL adds lookback. Use truncate for protected table definitions and pin the CLI version for critical loads.
How Much Does Sling Cost?
Paid CLI plans include unlimited connections and volume, with a seven-day Pro trial; Platform pays for management, not hosted agents.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| CLI | Free | GPL-3.0; self-run | Full-refresh, incremental, truncate, snapshot, backfill |
| CLI Pro | $79/month | Per team | APIs, hooks, parallel streams, capture deletes |
| CLI Pro Max | $149/month | Per team | CDC; schema migration |
| Platform Standard | $99/month | Flat monthly | Scheduling; 1 production agent; alerts |
| Platform Advanced | $249/month | Flat monthly | 3+ production agents; CDC; self-hosted control plane |
11. Skyvia: Best Budget Option
- Skyvia pricing: Free plan with 10,000 records a month; Basic $79 and Standard $159 a month, billed annually
- Postgres support: Postgres as source and destination for import, export, replication and sync; no log-based CDC
- Deployment: Managed no-code cloud service; Enterprise adds a dedicated VM
Skyvia wins on budget because its free plan and $79-a-month Basic tier move data both ways without code. However, timestamp-based replication misses hard deletes, which makes Hevo the managed no-code upgrade when removed rows must reach your warehouse.
Pros
- ✔️ Free plan with 10,000 monthly records
- ✔️ Postgres as source and destination
- ✔️ Automatic destination-table creation
Cons
- ❌ No log-based CDC or hard-delete tracking
- ❌ Primary keys and created/modified timestamps required
- ❌ No automatic discovery of new source columns
What’s new with Skyvia? ⬇️
New accounts receive a 14-day Professional trial with five million records. Afterward, you must request the Free plan and wait for approval.
Why use Skyvia in 2026? ⬇️
Skyvia handles SaaS-to-Postgres loads and Postgres exports under one subscription. Professional schedules run every minute, but frequent polling still isn’t streaming CDC.
My Skyvia testing notes ⬇️
Before scheduling Skyvia replication, I check every table for a primary key and reliable creation and modification timestamps. Missing modification timestamps hide edits, while hard deletes leave nothing to track. Processed-record billing also counts updates that write unchanged values, so make sure created_at and updated_at reliably reflect changes before enabling incremental replication.
How Much Does Skyvia Cost?
Paid prices are starting points, because each plan’s total also scales with the monthly processed-record allowance you select.
| Plan | Price | Billing basis | Includes |
|---|---|---|---|
| Free | $0 | 10,000 records/month | Daily; 2 scheduled integrations |
| Basic | $79/month annually; $99 monthly | Records/month | Daily; 5 integrations |
| Standard | $159/month annually; $199 monthly | Records/month | Hourly; 50 integrations; Data Flow |
| Professional | $399/month annually; $499 monthly | Records/month | Every minute; unlimited integrations; Control Flow |
How Do I Choose the Right PostgreSQL ETL Tool?
If deleted Postgres rows must disappear downstream, shortlist the log-based CDC tools. For loading other sources into Postgres, start with Sling or dlt for engineer-operated jobs, and Estuary or AWS DMS for managed replication.
Match the billing unit to your churn: MAR counts active row identities, while events and records can count repeated operations. GB and hourly meters track volume or runtime. Apache Airflow and dbt won’t move rows by themselves: Airflow schedules jobs, and dbt transforms loaded data.
Use these questions to narrow your shortlist:
- Do I need deleted rows removed or flagged in the destination?
- Can I turn on logical replication on my host and restart the database?
- Which PostgreSQL version am I on, and does the tool’s CDC support it?
- Does every table I replicate have a primary key?
- Will I pay per row, per event, per GB or per hour when a busy table churns?
- Who gets alerted when a replication slot stops advancing?
We also considered Integrate.io, Artie, Streamkap, Matillion, Striim, Qlik Talend Cloud and Informatica. Artie and Streamkap are the closest real-time alternatives to Estuary, while Integrate.io offers a flat $1,999 monthly plan. Azure teams can consider Fabric mirroring into OneLake, while Supabase Pipelines remains in public alpha. Our best MongoDB ETL tools roundup covers stacks running both databases.
Can I Switch PostgreSQL ETL Tools Later?
Yes, but switching isn’t a config change. Log-based tools maintain their own replication slots and checkpoints, so plan a fresh snapshot rather than transferring another connector’s position. Before PostgreSQL 17, logical slots also did not survive major-version upgrades.
Re-snapshot costs differ: Fivetran excludes initial historical loads from MAR, while ClickPipes charges $0.10 per GB for resyncs. Run both tools on separate slots, compare row counts and delete behavior, then drop the old slot after cutover so it cannot fill your source disk.
What If I Need to Load Data Into PostgreSQL?
Sling, dlt, Estuary and AWS DMS support recurring Postgres loads. For a one-time migration, pgloader moves MySQL, SQLite or SQL Server data with type casting. Its last tagged release dates to 2022, but development continues and a Java-based rewrite remains pre-release. Our PostgreSQL vs MySQL comparison covers that migration decision.
pglogical is an open-source PostgreSQL extension, now maintained by EnterpriseDB, that copies and inserts the Postgres datasets you choose into other Postgres databases. pglogical’s data prep features include row and column filtering during replication. It added PostgreSQL 19 support, but EnterpriseDB directs new features toward Postgres Distributed; native replication handles simpler Postgres-to-Postgres copies.
With Singer’s data extraction scripts, called taps, you can create custom ETLs that upload data from non-standard sources, formats, and APIs. Target scripts take your extracted data from taps and load it to data warehouses. Meltano runs these together, with MeltanoLabs’ target-postgres providing a maintained Postgres target. Learn how to work with Singer taps and targets in this Singer tutorial.
How We Test and Rank PostgreSQL ETL Tools
We evaluate Postgres pipelines around capture behavior and operational risk, not advertised speed. Our framework covers replication setup, delete delivery and stalled-slot recovery, alongside the cost of a busy table. For this list, Postgres capture quality carries the most weight:
- Postgres capture quality (30%): We assess CDC, deletes, TOAST, schema changes, and host and version coverage.
- Pricing and cost predictability (20%): We compare billing units against update-heavy and delete-heavy workloads.
- Operational safety (15%): We assess slot management, heartbeats, failover support and stalled-sync recovery.
- Destinations and direction (15%): We assess warehouse targets and whether the tool loads into Postgres.
- Setup and maintenance effort (10%): We assess database configuration and the infrastructure you operate yourself.
- Openness and vendor stability (10%): We review licensing, deployment choices and ownership changes.
Prices current as of November 2026.
Estuary ranks first for capture quality and price predictability. Fivetran loses ground on delete billing, Airbyte on its CDC version floor, and Skyvia on its lack of log-based CDC.
Final Verdict: Which PostgreSQL ETL Tool Do I Recommend?
Estuary is my pick for most teams because it captures Postgres changes and deletes across major hosts, writes back into Postgres, and bills per GB you can predict. Choose Fivetran when handing off hundreds of SaaS connections matters more than minimizing software costs, or AWS DMS when your data stays inside AWS and you control table keys.
Free software still needs an operating budget, especially when your team owns replication-slot recovery. I recommend starting on Estuary’s free tier or Airbyte Core with a representative busy table, deleting a few rows, and confirming the destination handles those deletes correctly. Include a schema change and slot-lag alert before expanding beyond that first pipeline.
FAQs
Which PostgreSQL ETL tools capture deletes?
Estuary, Fivetran logical replication, Airbyte CDC, Hevo logical replication, Debezium, dlt’s pg_replication, Datastream and PeerDB capture deletes. AWS DMS does too when tables have primary keys. Cursor and xmin methods can’t see a row that no longer exists, and Skyvia’s timestamp replication misses hard deletes. Fivetran’s Query-Based mode is an exception when you explicitly enable its separate delete-capture option.
Can a replication slot fill up my Postgres disk?
Yes, because a slot retains WAL its consumer hasn’t confirmed, and max_slot_wal_keep_size=-1 means no limit. Even idle RDS databases generate heartbeat WAL, so set a retention cap, alert on lag through pg_replication_slots, and remove unused slots. PostgreSQL 18’s idle_replication_slot_timeout can invalidate abandoned slots, but neither setting replaces monitoring: invalidation can require a fresh snapshot before your pipeline resumes.
Is there a free ETL tool for PostgreSQL?
Yes, Debezium and dlt use Apache 2.0, Sling’s CLI uses GPL-3.0, and PeerDB is free under AGPL-3.0. Airbyte Core is free to self-host under the source-available Elastic License 2.0. You pay in servers and engineering time instead. Managed free allowances include Estuary’s 10 GB monthly, Fivetran’s 500,000 MAR and Skyvia’s 10,000 records, each subject to its plan restrictions.
Can I run Postgres CDC from a read replica?
Yes, with PostgreSQL 16 or later and a compatible tool and host. Fivetran and Estuary support standby capture, while Airbyte requires 16.1 or later. Hevo supports eligible RDS and Azure standbys, while Artie excludes Aurora; older versions generally require primary capture. PostgreSQL 17+ failover slots can also help Debezium continue after promotion, but configure synchronization and confirm slot readiness before switching.
Comments 0 Responses