3 ms·
> Logical replication is also great for replicating to other systems - for example Debezium [1] that writes all changes to a Kafka stream. So I'm looking for a
by nextaccountic 4y ago
> Logical replication is also great for replicating to other systems - for example Debezium [1] that writes all changes to a Kafka stream.
So I'm looking for a Rust library (or a C library) that receives a Postgres logical replication stream and is compatible with Postgres 15, does you know of something?
Debezium is unfortunately written in Java, and I think your Powersync is proprietary right? (I didn't find a Github link). I can find stuff like https://www.npmjs.com/package/pg-logical-replication https://www.npmjs.com/package/pg-logical-replication but again, it's Javascript.
- matharmin 4y agoFor C there should be good options. For Rust it doesn't appear that well-supported. A very simple approach is to poll for changes using `pg_logical_slot_get_changes()` - that should work with any driver. That's what I used for my initial experimentation, before switching over to the streaming replication protocol for better performance. The streaming replication protocol is not that complicated, but currently you'll have to handle some of the low-level protocol yourself, or work with some very experimental implementations. There's a project to help get you started at [1], and some more discussion at [2]. For the logical decoder, wal2json is quite nice to experiment with, but I've found pgoutput is not that complicated and gives you something closer to the raw data. [1]: https://github.com/seddonm1/logicaldecoding/ https://github.com/seddonm1/logicaldecoding/ [2]: https://github.com/sfackler/rust-postgres/issues/116 https://github.com/sfackler/rust-postgres/issues/116