v0.2.3 — Non-Determinism Detection and Operational Polish

Full technical details: v0.2.3.md-full.md

Status: ✅ Released | Scope: Small (~2 weeks)

Detection and clear warnings for queries that use non-deterministic functions, gap closures in CDC and refresh modes, and operational convenience improvements.


What problem does this solve?

Some SQL functions produce different results every time they are called — now() returns the current timestamp, random() returns a random number. A stream table defined with such functions will drift from the correct answer over time, because the differential engine cannot correctly compute the delta for results that depend on the current time or random values. This release adds detection and clear guidance for this class of issue, alongside other operational improvements.


Non-Deterministic Function Detection

If your stream table query uses now(), current_timestamp, random(), or any other volatile function, pg_trickle will now warn you at creation time (or refresh time, for existing stream tables) that the results may drift.

An explicit non_deterministic => true flag can be passed to acknowledge the behaviour and suppress the warning, for cases where the drift is intentional and understood.

In plain terms: if you accidentally create a stream table like “orders placed before NOW()”, pg_trickle will tell you that this will become stale immediately, rather than silently refreshing with increasingly wrong results.


CDC and Refresh Mode Gap Closures

Several edge cases in the interaction between change-data capture (CDC) and specific refresh modes were identified and resolved:

  • IMMEDIATE mode handling of UPDATE statements that change primary key values
  • WAL decoder and trigger-based CDC producing different row ordering in specific edge cases
  • FULL refresh mode not correctly resetting certain differential state

Operational Convenience

Small but useful additions:

  • pgtrickle.list_stream_tables() — lists all stream tables with their current status in a single readable query
  • Better error messages that include the stream table name and a hint about the likely cause
  • Improved handling of DROP TABLE on a source table while a refresh is in progress — now produces a clean error rather than a crash

Scope

v0.2.3 is a polish and safety release. The non-determinism detection prevents a whole class of subtle correctness issues. The operational improvements reduce friction in daily use.