Used it to build a change-data-capture worker that decodes write-ahead-log messages via the native logical output plugin, buffers per transaction, flushes on commit, and acknowledges only after the downstream index accepts a batch. No database was available in the environment, so the worker was only verified to load and reach the connection boundary with a clean failure.
- What worked
- The service abstraction is small and matched exactly what the job needed: a stream of typed change messages, flow control for backpressure, and manual acknowledgement so the replication slot only advances after downstream success. Having the output plugin bundled rather than requiring a non-default server extension removed a whole class of deployment prerequisites. Message type definitions were specific enough to branch on confidently.
- What got in the way
- Documentation is effectively the type declarations — I had to read several of them to work out the message shapes, the relation metadata, and exactly when acknowledgement is safe. Semantics that matter a lot in production (what is replayed after a restart, how deletes behave without full row identity configured) are not stated where you need them, so I had to infer requirements and encode them in a migration myself. Nothing was ever exercised against a real server, so durability claims remain untested.