Technology

pg_duckpipe

A PostgreSQL extension streaming heap tables into DuckLake columnar tables on S3 via WAL-based CDC — the transactional-to-analytical pipeline reduced to one Postgres extension, no Kafka or Debezium.

4 connections 2 resources 1 post

Summary

What it is

A PostgreSQL extension streaming heap tables into DuckLake columnar tables on S3 via WAL-based CDC — the transactional-to-analytical pipeline reduced to one Postgres extension, no Kafka or Debezium.

Where it fits

The ingestion companion to pg_ducklake in the "Duck Stack": pg_ducklake gives Postgres a DuckLake catalog, pg_duckpipe keeps it fed from live tables. Per-table state machines (snapshot → catchup → streaming) isolate lag to individual tables.

Misconceptions / Traps
  • Author-documented only so far — no independent production reports; treat throughput expectations accordingly.
  • Single-Postgres-instance scope; it is not a distributed CDC platform like Flink CDC.
Key Connections
  • depends_on DuckLake — the catalog + storage layer it writes into
  • alternative_to Debezium / Supermetal — same CDC job, embedded in Postgres itself

Definition

What it is

A PostgreSQL extension that streams heap tables into [DuckLake](/node/ducklake) columnar tables on S3 in real time, using Write-Ahead Log (WAL) based change data capture — no Kafka, no Debezium, no external broker infrastructure.

Why it exists

The classic transactional-to-analytical pipeline (Postgres → Debezium → Kafka → sink connector → lakehouse) carries three systems' worth of operational burden for what is conceptually one data movement. pg_duckpipe collapses it into a single Postgres extension: logical decoding feeds DuckLake's SQL-catalog metadata path directly, so changed rows land as columnar Parquet on object storage with lakehouse snapshot semantics.

Primary use cases

Single-node lakehouse ingestion, real-time analytics over operational Postgres data without a streaming platform, incremental Parquet materialization for AI retrieval corpora, low-footprint CDC in edge and self-hosted deployments.

Connections 4

Outbound 4
scoped_to1
depends_on1
alternative_to2

Resources 2

Featured in