Editor’s note: This PeerDB review is based on my hands-on evaluation of self-hosted PeerDB v0.37 and the ClickHouse Cloud Postgres CDC ClickPipe that runs on it, in October 2026. I weighed pricing, setup, CDC mechanics, ClickHouse-side behavior, connectors, licensing and rivals.
Quick verdict: I recommend PeerDB for moving Postgres or MySQL into ClickHouse, self-hosted for free or managed through ClickPipes. The trade-off: it is no longer a general CDC tool, with Snowflake, BigQuery, Kafka and S3 targets deprecated.
Kaushik Iska and Sai Srirampur founded PeerDB in 2023; ClickHouse acquired it on July 30, 2024 and says every component of its Postgres CDC ClickPipe except the UI extends directly from PeerDB.
In this review, I’ll take a closer look at PeerDB’s pricing, features, and limits, so you can see exactly whether it fits your workload.
Key Takeaways:
- Free to self-host under AGPL-3.0 since January 13, 2026, or managed as a ClickPipe in ClickHouse Cloud (GA May 29, 2025)
- ClickPipes bills $0.20 per GB of CDC, $0.10 per GB of initial load, plus $0.10 to $0.20/hour compute
- Only ClickHouse and Postgres destinations are maintained; Snowflake, BigQuery, Kafka and S3 are deprecated
- Vueling’s snapshot fell from over 10 hours to 15 minutes (ClickHouse’s figure)
- Self-hosting means running Temporal, a catalog and MinIO, and deletes land as flagged rows
Pros and Cons
Pros
- Free to self-host under AGPL-3.0, with weekly releases (v0.37.13 on October 22, 2026)
- Parallel CTID-block snapshots: Vueling cut a 10-hour initial load to 15 minutes
- One Postgres-wire SQL interface: CREATE PEER and CREATE MIRROR from psql on port 9900
- Managed option in ClickHouse Cloud ClickPipes at $0.20 per GB of CDC changes
- Connects to RDS, Aurora, Cloud SQL, AlloyDB, Azure, Supabase, Neon and more
Cons
- Only ClickHouse and Postgres targets are maintained; Snowflake, BigQuery, Kafka and S3 are deprecated
- Standalone PeerDB Cloud for non-ClickHouse targets reached end of life on July 30, 2025
- Self-hosting means running Temporal, a Postgres catalog and MinIO staging yourself
- Dropped columns are not propagated and column type changes are unsupported
- No connection poolers for CDC: PgBouncer, RDS Proxy and Supabase Pooler are out
How Much Does PeerDB Cost?
PeerDB itself costs nothing to self-host under AGPL-3.0. The managed form is the Postgres CDC ClickPipe in ClickHouse Cloud, metered since September 1, 2025 on two dimensions: data volume and compute.
- Self-hosted PeerDB (free): For teams that already run Docker Compose or Kubernetes. The software is free; the bill is your hosts, the Postgres catalog, Temporal and MinIO staging.
- ClickPipes on Basic tier ($0.10 per hour compute): For ClickHouse Cloud Basic services. You get 0.5 CU (1 vCPU, 4 GB RAM), about $73 a month at 730 hours.
- ClickPipes on Scale or Enterprise ($0.20 per hour compute): For Scale and Enterprise services. You get 1 CU (2 vCPU, 8 GB RAM), about $146 a month at 730 hours.
Data volume is charged on every tier: $0.10 per GB for initial load and resync, then $0.20 per GB for continuous CDC, counted on raw, uncompressed bytes read from the replication stream. Compute is shared by every CDC ClickPipe in the service, Postgres and MySQL alike, and extra compute units scale linearly.
There is no free allowance for Postgres CDC, and a paused pipe still pays for compute even though data-volume charges stop. The 30-day ClickHouse Cloud trial with $300 in credits is the closest thing to a free tier.
The old PeerDB Cloud tiers still appear on peerdb.io, from Micro at $250 a month to Large at $4,000, but they are discontinued. From July 30, 2024, PeerDB Cloud only took Postgres to ClickHouse Cloud pipelines, and paid customers on other targets reached end of life on July 30, 2025.
| Option | Price | What you get | Notes |
|---|---|---|---|
| Self-hosted PeerDB | Free, AGPL-3.0 | All maintained sources and destinations | You run Temporal, the catalog, workers and MinIO |
| ClickPipes Basic | $0.10/hour compute; $0.10/GB load; $0.20/GB CDC | 0.5 CU (1 vCPU, 4 GB) per service | About $73/month compute at 730 hours |
| ClickPipes Scale or Enterprise | $0.20/hour compute; same data rates | 1 CU (2 vCPU, 8 GB) per service | About $146/month compute at 730 hours |
| ClickHouse’s own example (Scale) | $30 load (300 GB, once); $30 CDC (150 GB a month); $146 compute | One service with a Postgres and a MySQL pipe | Compute is the largest line at low change volumes |
| Old PeerDB Cloud | Micro $250; Small $1,000; Medium $2,000; Large $4,000 (contact sales) | Legacy monthly tiers | Discontinued, not purchasable for new pipelines |
Is PeerDB Good Value for Money?
- Good fit: ClickHouse Cloud customers. The pipe lands on a bill they already pay, low-change databases add little beyond the compute floor, and several CDC pipes share one allocation.
- Less convincing fit: High-churn databases. At $0.20 per GB, 1 TB of changes a month costs $200 before compute, however small the final analytical table is.
- Budget priority: Self-hosting skips the meter if you already run Kubernetes and Temporal. For contrast, Estuary Flow charges $0.50 per GB counted at both capture and delivery, plus $100 per connector instance a month.
Reviewer’s Notes: On ClickHouse Cloud, I’d use the ClickPipe and size the initial load first, since it bills at the lower $0.10 rate and every resync bills at it again. I’d self-host only for Postgres-to-Postgres replication or a ClickHouse you run yourself, and only with a team willing to own Temporal and MinIO.
My Experience With PeerDB
Starting the Open-Source Stack
The self-hosted route needs only Docker, Docker Compose and psql on the machine. I cloned the repository recursively and started the bundle with one script:
git clone --recursive https://github.com/PeerDB-io/peerdb.git
cd peerdb
./run-peerdb.sh
That script brings up a Postgres catalog, Temporal, the PeerDB server, the flow API and workers, MinIO for staging and the UI on localhost:3000. That is a multi-service deployment to maintain, not one binary.
The SQL interface listens on port 9900 and accepts psql, pgAdmin, Flyway or Airflow connections. If ClickHouse runs outside Docker, it must be able to reach MinIO, because PeerDB stages data there.
Users report the flow services failing to create a Temporal client on first start, and MinIO staging filling the disk on long runs because temporary files are not deleted. I’d check Temporal first when a mirror will not start, and watch disk during large loads.
Creating Peers and a CDC Mirror
The source database needs wal_level=logical, a replication user, a publication and a replication slot. The quickstart’s quickstart_prepare_peers.sh script creates sample source and target databases with a test table for the first mirror:
- I opened Peers, chose Create Peer, picked Postgres, filled in the form, then clicked Validate and Create.
- I repeated the same steps for the destination peer.
- Under Mirrors, I created a new mirror of type CDC and named it with letters, digits and underscores only.
- I picked the source and destination peers, selected the tables, then ran Validate Mirror and Create Mirror.
The mirror defaults are an initial snapshot, a 60-second sync interval, 500,000 rows per snapshot partition and 4 tables in parallel. PeerDB suggests intervals above 3,600 seconds for cost-sensitive setups, which means accepting data up to an hour old.
To check replication, I inserted a row into the source table through port 9900, read the target table back, and followed progress on the Sync Status tab under Mirror Overview:
INSERT INTO source.public.test(c1,c2,t) VALUES(1,2,'oathbringer');
SELECT id,c1,c2,t FROM target.public.test;
The same port accepts CREATE PEER and CREATE MIRROR, so peers and mirrors can be scripted across many databases:
CREATE PEER <source-peer> ...
CREATE PEER <target-peer> ...
CREATE MIRROR <mirror-name> ...
The ClickPipes Route
On ClickHouse Cloud, I enabled logical replication, created the replication user and allowed the ClickPipes IP addresses, then created the pipe in the console or with clickhousectl cloud clickpipe create postgres. The --postgres-type flag accepts supabase, neon, alloydb, rdspostgres, aurorapostgres, cloudsqlpostgres, azurepostgres, crunchybridge, tigerdata and more, and more than 50 pre-flight checks run before the pipe starts.
Connect directly: PgBouncer, RDS Proxy and Supabase Pooler are not supported for CDC. Debezium’s Kafka Connect route needs Kafka, Kafka Connect and a sink connector for the same job; PeerDB needs none of the three.
Reviewer’s Notes: I’d set
max_slot_wal_keep_sizebefore the first mirror. ClickHouse recommends at least 200 GB, because an invalidated slot can only be recovered with a full resync, which ClickPipes bills again at $0.10 per GB.
Initial Loads and CDC: How PeerDB Moves Postgres Data
PeerDB splits each table’s initial load into CTID-block partitions, 500,000 rows each by default, and loads several tables in parallel before switching to log-based CDC over a logical replication slot. ClickHouse says the CTID approach replaced COUNT and window-function queries that took hours, and it is the part of PeerDB I rate highest.
Snapshot Maximum Parallel Workers defaults to 1 worker, with 4 tables in parallel, so raise it before a large open-source load. On ClickPipes, --initial-load-parallelism sets parallelism when the pipe is created.
- Snapshot then CDC: Existing rows copy first, then changes stream continuously.
- Freshness: The sync interval is 60 seconds by default.
- Partitioned tables: Supported on both versions.
- ClickPipes controls: Custom ordering keys, table and column filtering, in-place pipe edits, resync, and slot-size monitoring with alerts. After creation, the CLI can only change syncIntervalSeconds and pullBatchSize.
- Connectivity: AWS PrivateLink, GCP Private Service Connect or an SSH tunnel, with setup through the UI, API or Terraform.
- Postgres destinations: Maintained, but indexes, constraints and triggers are not migrated.
ClickHouse’s customer figure is that Vueling cut snapshot time from more than 10 hours to 15 minutes. PeerDB claims data freshness of a few tens of seconds at 10,000+ transactions per second. ClickHouse says parallel snapshotting moves tens of TB in hours, and reported in December 2025 that 400+ companies replicate over 200 TB of Postgres data a month through the ClickPipe. All four are vendor figures.
The trade-off sits in Postgres itself. Logical decoding is not stateless, so a reconnect re-reads WAL from restart_lsn to rebuild open-transaction and catalog state. Long-running transactions and large backfills grow the slot, and ClickHouse acknowledges slot growth during big backfills on high-volume workloads.
Beyond Postgres
Open-source PeerDB also maintains four more sources: MySQL (GTID or file position), MongoDB, CockroachDB and BigQuery. On ClickPipes, MySQL is GA, MongoDB is in public beta and BigQuery is in private preview.
Debezium’s Kafka path runs in three stages: stream changes to Kafka, sync raw changes to the target, then normalize. PeerDB writes straight to the target, the better design when ClickHouse is the only destination.
- Best for: Large Postgres snapshots followed by continuous ClickHouse replication.
- Skip if: Your migration must recreate Postgres indexes, constraints and triggers automatically.
ClickHouse Specifics: Deletes, Schema Changes and TOAST
Every Postgres DELETE arrives in ClickHouse as a new row with _peerdb_is_deleted set, written to a ReplacingMergeTree table. Deduplication runs asynchronously in the background, so duplicates stay visible until merges finish, and ClickHouse says most users handle that with FINAL.
FINAL collapses competing row versions, and _peerdb_is_deleted = 0 removes deleted rows. Analyst queries need both.
- Soft delete: Off by default on open-source mirrors; turning it on adds the
_peerdb_is_deletedcolumn. In the SQL interface,soft_delete = trueis not implemented: the parser reads onlysoft_delete_col_name, so the former creates a mirror with no flag column and no error. - Keeping history: A publication created with
publish = 'insert,update'never sends DELETE events, so deleted source rows stay in ClickHouse. - TRUNCATE: Ignored, so a truncated source table keeps its rows downstream.
- JSON:
jsonandjsonbland as String, and ClickPipes has no custom type mapping. Types PeerDB cannot match become TEXT, and a fix merged October 22, 2026 writes{}for SQL NULL into plain JSON columns during CDC. - Schema changes: ADD COLUMN propagates. A dropped column stays downstream and reads NULL for later rows, and column type changes are unsupported.
| Source operation or type | ClickHouse behavior | My recommendation |
|---|---|---|
| DELETE | New flagged row | Deduplicate and filter deleted rows |
| ADD COLUMN | New column propagates | Check downstream views |
| DROP COLUMN | Destination column remains; later values NULL | Plan destination cleanup separately |
| Column type change | Unsupported | Add a new column and resync |
| TRUNCATE | Ignored | Clear the destination yourself |
json / jsonb | String | Parse downstream |
TOAST Needs Deployment-Specific Care
On ClickPipes, set REPLICA IDENTITY FULL on tables with TOASTed columns. Without it, an UPDATE to another column leaves the unchanged TOAST value NULL or empty downstream, and DELETE rows show NULL or empty TOAST values.
Open-source PeerDB instead caches TOAST values to avoid needing that setting, and the same October 22 fix keeps unchanged TOAST columns on delete rows. It also stops Postgres-to-Postgres soft-delete mirrors on REPLICA IDENTITY DEFAULT from stalling on a hard DELETE when the target has NOT NULL non-key columns. On a self-hosted stack, confirm your release includes it.
Reviewer’s Notes: I’d build an analyst-facing view with
FINALand a_peerdb_is_deleted = 0filter on day one. Plan every type change as a new column plus a resync, because PeerDB will not reproduce an ALTER TYPE downstream.
Sources, Targets and What Got Deprecated
PeerDB’s Snowflake, BigQuery, S3, Kafka (Confluent and Redpanda included), Elasticsearch, Azure Event Hubs and Google Pub/Sub destinations are deprecated and unmaintained. They still work in current and prior releases and no code is being removed, but the only paths forward are pinning a release or forking.
| Connector | Role | Status |
|---|---|---|
| Postgres | Source | Maintained |
| MySQL, MongoDB, CockroachDB, BigQuery | Source | Maintained |
| ClickHouse, ClickHouse Cloud, Postgres | Destination | Maintained |
| Snowflake, BigQuery, S3 | Destination | Deprecated |
| Kafka, Confluent, Redpanda | Destination | Deprecated |
| Elasticsearch, Azure Event Hubs, Google Pub/Sub | Destination | Deprecated |
BigQuery stays a maintained source even though it is deprecated as a destination, so BigQuery to ClickHouse is supported while Postgres to BigQuery is not. Query Replication (QRep) and XMIN mirror types are deprecated too, though functional; CDC is the recommended type for new mirrors.
On the Snowflake destination, mixed-case column names break MERGE during schema-change replay, and a fix is unlikely on an unmaintained connector. On the source side, ClickPipes takes any hosted or on-prem Postgres, including RDS, Aurora, Cloud SQL, AlloyDB, Azure, Supabase, Neon, Crunchy Bridge, PlanetScale and Tiger Data.
Licensing
PeerDB moved from ELv2 to AGPL-3.0 on January 13, 2026, although the repository’s license badge still reads ELv2. ELv2 is source-available; AGPL-3.0 is OSI-approved open source, but its network-use obligations are a strong copyleft that some corporate policies restrict.
The July 2024 acquisition also made PeerDB’s Enterprise offering, with production-grade Helm charts, free and open. If your policy rules out AGPL, Debezium’s Apache 2.0 license is the cleaner option, and its Kafka Connect route still reaches any target Kafka Connect supports.
Project Health
The repository had 3,309 stars and 227 forks on October 22, 2026, and shipped 8 releases between September 10 and October 22, ending with v0.37.13. Recent fixes target TOAST columns on delete rows and SQL NULL in ClickHouse JSON columns.
I read that as active maintenance for a narrower product. For Snowflake or BigQuery warehouses, I’d choose Estuary Flow or Artie over building on PeerDB’s deprecated connector code.
How Does PeerDB Compare to Competitors?
PeerDB targets ClickHouse and Postgres, while the rivals deliver to warehouses, lakes and Kafka, billing by GB, rows, credits, events or compute hours. On price, ClickPipes’ $0.20 per GB counted once undercuts Estuary’s $0.50 counted at capture and delivery, but only for teams already on ClickHouse Cloud.
| Tool | Starting price | Model | Best at |
|---|---|---|---|
| PeerDB | Free self-hosted; ClickPipes $0.20/GB CDC plus compute from $0.10/hour | Direct CDC, self-hosted or managed | Postgres to ClickHouse |
| Debezium | Free, Apache 2.0 (3.7.0.Final, September 2026) | Log-based CDC on Kafka Connect or Debezium Server | Any Kafka-reachable target |
| Estuary Flow | Free to 10 GB/month; $0.50/GB at capture and delivery plus $100 per connector a month | Managed streaming ETL | Real-time CDC to many targets |
| Fivetran | Free to 500,000 MAR; paid usage by MAR | Managed ELT | 700+ connectors |
| Airbyte | Standard from $20/month; Plus from $189/month | Open-source and cloud ELT | General-purpose integration |
| Striim | Free Developer tier to 25 million events/month; paid on request | Enterprise streaming CDC | Enterprise streaming |
| Artie | Free to 1M rows and 2 pipelines; Growth from $500/month annually | Managed CDC | Snowflake, BigQuery, Databricks, ClickHouse |
| AWS DMS | Serverless per DCU-hour | AWS-managed migration and CDC | AWS-native migrations |
- PeerDB vs Debezium: Debezium wins on reach, with 18 source and 25 sink connectors, and on its Apache 2.0 license; 3.7.0.Final shipped September 29, 2026. Debezium Server runs without Kafka, but raw change events still need your own normalization into a warehouse.
- PeerDB vs Estuary Flow: Estuary is my pick for managed CDC beyond ClickHouse. It counts data twice, so 100 GB from Postgres to Snowflake bills as 200 GB, $300 a month with 2 connector instances.
- PeerDB vs Fivetran: Fivetran suits teams that want database replication inside a 700+ connector catalog. Standard syncs every 15 minutes; 1-minute syncs and enterprise database connectors sit on Enterprise, and MAR billing varies month to month.
- PeerDB vs Airbyte: Airbyte fits general ELT. Standard buys 5 credits (about 1 GB) for $20 a month, and credit metering varies by source, so that price says little about a CDC bill. A 14-day trial includes 400 credits.
- PeerDB vs Striim: Striim targets enterprise streaming deployments across Cloud and Platform editions. The free Developer tier stops at 25 million events a month, and Cloud, Platform and Validata pricing is on request only.
- PeerDB vs Artie: Artie is the closest managed-CDC replacement for PeerDB’s deprecated warehouse targets, with Growth from $500 a month billed annually or $600 month to month.
- PeerDB vs AWS DMS: DMS suits AWS-centered migrations. Serverless bills per DCU-hour (1 DCU = 2 GB RAM, sizes 1 to 384) plus cross-AZ or cross-Region transfer, which does not map onto a per-GB change meter. New AWS accounts get a free tier or free-plan credits.
How I Reviewed PeerDB
I evaluated self-hosted PeerDB v0.37 and the Postgres CDC ClickPipe as separate products, because their setup and billing differ. On the open-source side I worked through the Compose stack, peer creation, a CDC mirror and the SQL interface on port 9900; on ClickPipes, source preparation, pipe creation and the two-part meter.
I weighted correctness over speed: delete handling, schema changes, TOAST behavior and replication-slot invalidation. Speed figures stay attributed to PeerDB or ClickHouse. I compared PeerDB with Debezium, Estuary Flow, Fivetran, Airbyte, Striim, Artie and AWS DMS, ranking maintained destinations and operational ownership above entry prices, and factored in the license history and the July 30, 2025 end of standalone PeerDB Cloud.
Prices current as of October 2026.
Should You Use PeerDB for Postgres CDC?
PeerDB is fast, Postgres-native CDC with a standout initial-load design, but it is now a ClickHouse on-ramp rather than a general CDC platform. I recommend PeerDB when ClickHouse is the destination and parallel snapshots decide how fast analytics goes live.
- ClickHouse Cloud customers: Use the Postgres CDC ClickPipe and budget the $73 or $146 monthly compute floor, plus $0.20 per GB of changes and $0.10 per GB for the initial load.
- Self-managed ClickHouse or Postgres-to-Postgres teams: Self-host PeerDB for free, if your team can run Temporal, the catalog and MinIO; indexes, constraints and triggers do not migrate.
- Snowflake, BigQuery or Kafka destinations: Pick Estuary Flow, Debezium, Fivetran or Artie rather than deprecated connectors.
- Teams behind PgBouncer or RDS Proxy: Set up a direct replication connection first; ClickPipes does not support poolers for CDC.
Start the 30-day ClickHouse Cloud trial with $300 in credits, run a Postgres ClickPipe on your highest-churn table, and check the per-GB charge before adding more pipes.
FAQs
Is PeerDB open source?
Yes. PeerDB is open source under AGPL-3.0 since January 13, 2026. Before that it used ELv2, which is source-available rather than OSI-approved open source. AGPL’s network-use obligations apply when you offer a modified version over a network, so check your organization’s copyleft policy before embedding or modifying PeerDB.
What happened to PeerDB after the ClickHouse acquisition?
ClickHouse acquired PeerDB on July 30, 2024. PeerDB now powers the Postgres CDC ClickPipe, generally available since May 29, 2025 and metered since September 1, 2025. Standalone PeerDB Cloud for non-ClickHouse targets reached end of life on July 30, 2025. The open-source project still ships weekly to fortnightly, with v0.37.13 released October 22, 2026.
How much does PeerDB cost?
PeerDB is free to self-host; you pay only for infrastructure and the time to run it. ClickPipes charges $0.10 per GB for initial loads and resyncs and $0.20 per GB for continuous CDC. Compute costs $0.10 an hour on Basic or $0.20 an hour on Scale and Enterprise per service, shared across its CDC ClickPipes.
Does PeerDB support Snowflake or BigQuery?
Snowflake and BigQuery destinations still work but are deprecated and unmaintained, so new pipelines would rest on code that no longer gets fixes. Your options are pinning a release, forking, or choosing a maintained tool such as Estuary Flow or Artie. BigQuery remains a maintained source. See Sources, Targets and What Got Deprecated above for the full matrix.
PeerDB vs Debezium: which should I use?
Use PeerDB for Postgres to ClickHouse when you want a direct replication path without Kafka, Kafka Connect or a normalization step. Choose Debezium for broader reach (18 source and 25 sink connectors), Apache 2.0 licensing, or any Kafka-reachable target. Debezium Server can also run without Kafka, but you still normalize raw change events yourself.

