pg-logical-replication
logicaldecoding
pg-logical-replication | logicaldecoding | |
---|---|---|
2 | 3 | |
79 | 19 | |
- | - | |
2.6 | 10.0 | |
over 1 year ago | over 1 year ago | |
TypeScript | Rust | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
pg-logical-replication
-
PostgreSQL Logical Replication Explained
> 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 but again, it's Javascript.
-
Sync databases on command
And I also found these two library that support the two plugin: - https://github.com/kibae/pg-logical-replication - https://github.com/hasura/pgdeltastream
logicaldecoding
-
PostgreSQL Logical Replication Explained
For 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/
[2]: https://github.com/sfackler/rust-postgres/issues/116
-
Postgres Logical Decoding Example
Here is a link to the code: https://github.com/seddonm1/logicaldecoding
- Show HN: Logical Replication with Rust
What are some alternatives?
wal2json - JSON output plugin for changeset extraction
debezium - Change data capture for a variety of databases. Please log issues at https://issues.redhat.com/browse/DBZ.
pgdeltastream - Streaming Postgres logical replication changes atleast-once over websockets
Prisma - Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB and CockroachDB
crystal - 🔮 Graphile's Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more!
relay-starter-kit - 💥 Monorepo template (seed project) pre-configured with GraphQL API, PostgreSQL, React, and Joy UI. [Moved to: https://github.com/kriasoft/graphql-starter-kit]
slonik - A Node.js PostgreSQL client with runtime and build time type safety, and composable SQL.
nodejs-api-starter - 💥 Yarn v2 based monorepo template (seed project) pre-configured with GraphQL API, PostgreSQL, React, Relay, and Material UI. [Moved to: https://github.com/kriasoft/relay-starter-kit]
pglogical - Logical Replication extension for PostgreSQL 15, 14, 13, 12, 11, 10, 9.6, 9.5, 9.4 (Postgres), providing much faster replication than Slony, Bucardo or Londiste, as well as cross-version upgrades.
rust-postgres - Native PostgreSQL driver for the Rust programming language