v0.1.1 — Change Capture Correctness Fixes

Full technical details: v0.1.x.md-full.md

Status: ✅ Released | Scope: Patch

Critical correctness fixes for the WAL-based change capture path, discovered after the v0.1.0 launch.


What problem does this solve?

After shipping v0.1.0, real-world testing revealed three edge cases in the WAL decoder change-capture path that could cause incorrect results for specific table configurations. These are correctness bugs — not performance or usability issues — and they were fixed as a priority patch release.


WAL Decoder: Keyless Tables

The WAL-based change decoder computes a hash to identify each row (a primary key hash). For tables without a primary key, the hash was computed incorrectly, causing the decoder to lose track of which rows were updated or deleted.

In plain terms: if you used pg_trickle on a table with no primary key, the change tracking could silently produce wrong results. This is now fixed.


UPDATE Change Representation

When a row is updated, pg_trickle needs to know both the old value (to remove it from the stream table result) and the new value (to add the updated result). The WAL decoder was not correctly capturing the old column values in all cases.

This fix ensures that UPDATE operations are fully represented in the change buffer, which is essential for differential refresh to work correctly.


Removal of the Delete+Insert Strategy

An early implementation strategy that replaced UPDATE handling with DELETE+INSERT pairs was found to cause subtle duplication issues. This strategy was removed; the cleaner approach it was meant to work around has been handled properly.


Scope

v0.1.1 is a focused correctness patch. No new features were added. If you use WAL-based change capture, upgrade is recommended.