walshadow README

The project's README from github.com/ClickHouse/walshadow. As one markdown file: README.md.

walshadow

[!WARNING] Experimental

Project status: Development Preview

walshadow is under active development and being hardened through real-world testing and feedback. We recommend validating it thoroughly with your workloads. Interfaces and behavior may evolve

walshadow replicates PostgreSQL rows into ClickHouse from physical WAL, including initial load, continuous changes, schema evolution, restarts, and planned source switchover

Get Started

PostgreSQL 16 or newer is required. Source and walshadow shadow must use same PostgreSQL major version

Documentation

System design and diagrams live in architecture, unfinished work in plans, and build and test guidance in development. Read source for implementation details

Build from source

Clone repository with recursive submodules, then build Rust workspace and PostgreSQL module

# Clone source plus required pg-clickhouse-c and clickhouse-c submodules
git clone --recurse-submodules https://github.com/ClickHouse/walshadow.git
cd walshadow

# Build release binaries
cargo build --release

# Build and install PostgreSQL module with PGXS
make -C pgext install

Default features include LZ4. Use --no-default-features for uncompressed builds or enable zstd for Zstandard support

Built binaries:

walshadow PostgreSQL module is not an SQL extension. Managed shadow loads it through shared_preload_libraries

Test

# Build PostgreSQL module before integration tests
make -C pgext

# Run test suite and lints
cargo nextest run --workspace --all-targets
cargo clippy --all-targets -- -D warnings

Integration tests require initdb and pg_ctl on PATH

walshadow (ClickHouse/walshadow)

change-data-capture
Searching Database…

What is this?walshadow replicates PostgreSQL rows into ClickHouse by reading the physical WAL — initial load, continuous changes, schema evolution, restarts, and planned source switchover are all part of the flow.
What am I actually installing — a service, a CLI tool, a library?Mainly the walshadow-stream replication daemon, plus helper tools for filtering and classifying WAL. On the Postgres side it installs a module loaded via shared_preload_libraries — not a regular SQL extension.
How do I get a first setup running?Follow the Quickstart to bring up PostgreSQL, ClickHouse, and walshadow together with Docker Compose; to plug into databases you already run, use the Getting started guide instead.
Do I need a specific PostgreSQL version for it to work?Yes — PostgreSQL 16 or newer, and walshadow must run the same PostgreSQL major version as the source database.
Is it ready for production use?Not yet — it is an experimental Development Preview under active development and hardening, and interfaces and behavior may change, so validate it thoroughly with your own workloads.
What do the walshadow-filter and walshadow-classify helpers do?walshadow-filter filters offline WAL files at the segment level, and walshadow-classify classifies individual records — both are diagnostics helpers that ship alongside the main stream daemon.
Does it compress the data it replicates?Yes — default builds use LZ4 compression, you can enable zstd for Zstandard, or build with --no-default-features for uncompressed mode.
How does it handle schema changes and restarts?Schema evolution, restarts, and planned source switchover are explicit parts of the replication flow, each covered by its own documentation page rather than left to the user to improvise.
Can I replicate only some tables or several databases?Yes — the docs cover table selection, several source databases, and destination table configuration, so selective and multi-database replication are supported scenarios.
Creator
ClickHouse
Size
6.5 MB
Stars
242
Age
4mo
Commits · 90 Days