Hi Greg,

On Tue, Oct 27, 2026 at 11:57 AM Greg Burd <[email protected]> wrote:
> Okay, v12 on master (065dc52f1a4).

v12 fixes all five on my side. It also applies cleanly on today's
master (76a55702d89), and make check (243) and amcheck pass with no
warnings with both libraries (-O2, cassert+ASan), lz4 only and zstd
only. A SIGINT on entry to the evaluation gives the usual ERROR, the
damaged chunk one WARNING and no "resource was not closed", and the
numbers match yours: 27,881 and 27,894 instructions per value with 2
fetches, and 7 CDicts per evaluation, 5 of them inside ZDICT.

The subtransaction also holds in VACUUM (PARALLEL 2, ANALYZE), BEGIN
READ ONLY, a DO block with EXCEPTION and autovacuum; an autovacuum
ANALYZE cancelled by LOCK TABLE inside the evaluation stops without
adopting, and a hot standby refuses ANALYZE and replays the adoption.

Containment also held everywhere I could take a value out of its
column before a rewrite retired its dictionary: INSERT ... SELECT,
CTAS, a whole-row composite, an array, another dictionary column, a
matview, partition row movement, a WITH HOLD cursor, a procedure
variable across COMMIT, logical decoding and an extended MCV list.
So did REPACK (CONCURRENTLY) with DML committed during the copy, and
pg_upgrade, which keeps the dictionary OIDs.

Two leftovers: the 0005 message still says compressed_size() and "any
failure is logged and swallowed, never aborting ANALYZE", and
toast_dictionary.h:39 still names compressed_size(); my diff missed it.

Thanks for taking all of these in.

Regards,
Manu


Reply via email to