ETL
Stream Postgres changes anywhere, in real-time
ETL is a Rust framework for building change data capture (CDC) pipelines on Postgres. Stream inserts, updates, and deletes to BigQuery, Apache Iceberg, or your own custom destinations.
Start Here
| Your background | Recommended path |
|---|---|
| New to Postgres logical replication | Postgres Replication Concepts |
| Ready to build | Your First Pipeline (15 min) |
| Need custom destinations | Custom Stores and Destinations (30 min) |
| Setting up Postgres | Configure Postgres |
Why ETL?
- Real-time: Changes stream as they happen, not in batches
- Reliable: At-least-once delivery with automatic retries
- Extensible: Implement one trait to add any destination
- Fast: Parallel initial copy, configurable batching
- Type-safe: Rust API with compile-time guarantees
How It Works
- Initial copy: ETL copies existing table data to your destination
- Streaming: ETL streams events (Insert, Update, Delete, and more) in real-time
- Recovery: The store persists state so pipelines resume after restarts
See Architecture for details.
Quick Example
Add ETL to your project:
1 2 3 | |
Create a pipeline:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Documentation
| Section | What you'll find |
|---|---|
| Guides | Step-by-step instructions to get things done |
| Explanations | Deep dives into concepts and architecture |
Contributing
Pull requests and issues welcome on GitHub.
New destinations: Open an issue first to gauge interest. Each built-in destination carries long-term maintenance cost, so we only accept those with significant community demand.