Hi, I was working on committing patch 0001 from [1] and was a bit confused about some of the changes to the WAL format for gist and hash index vacuum. It looked to me that the changed code just flat out would not work.
Turns out the problem is that we don't reach deletion for hash and gist vacuum: gist: > Oh, I see. We apparently don't reach the gist deletion code in the tests: > https://coverage.postgresql.org/src/backend/access/gist/gistxlog.c.gcov.html#674 > https://coverage.postgresql.org/src/backend/access/gist/gistxlog.c.gcov.html#174 > > And indeed, if I add an abort() into , it's not reached. > > And it's not because tests use a temp table, the caller is also unreachable: > https://coverage.postgresql.org/src/backend/access/gist/gist.c.gcov.html#1643 hash: > And there also are no tests: > https://coverage.postgresql.org/src/backend/access/hash/hashinsert.c.gcov.html#372 I've since looked to other index AMs. spgist's XLOG_SPGIST_VACUUM_ROOT emitted, but not replayed: https://coverage.postgresql.org/src/backend/access/spgist/spgvacuum.c.gcov.html#474 https://coverage.postgresql.org/src/backend/access/spgist/spgxlog.c.gcov.html#962 gin's XLOG_GIN_VACUUM_DATA_LEAF_PAGE is not emitted, but only because of a RelationNeedsWAL() check: https://coverage.postgresql.org/src/backend/access/gin/gindatapage.c.gcov.html#852 I also looked at heapam: XLOG_HEAP2_LOCK_UPDATED is not replayed, but emitted: https://coverage.postgresql.org/src/backend/access/heap/heapam.c.gcov.html#5487 https://coverage.postgresql.org/src/backend/access/heap/heapam.c.gcov.html#9965 same for XLOG_HEAP2_REWRITE: https://coverage.postgresql.org/src/backend/access/heap/rewriteheap.c.gcov.html#928 https://coverage.postgresql.org/src/backend/access/heap/heapam.c.gcov.html#9975 and XLOG_HEAP_TRUNCATE (ugh, that record is quite the layering violation): https://coverage.postgresql.org/src/backend/commands/tablecmds.c.gcov.html#2128 https://coverage.postgresql.org/src/backend/access/heap/heapam.c.gcov.html#9918 The fact that those cases aren't replayed isn't too surprising - XLOG_HEAP2_LOCK_UPDATED is exercised by isolationtester, XLOG_HEAP2_REWRITE, XLOG_HEAP_TRUNCATE by contrib/test_decoding. Neither is part of 027_stream_regress.pl The lack of any coverage of hash and gist deletion/vacuum seems quite concerning to me. Greetings, Andres Freund [1] https://postgr.es/m/da7184cf-c7b9-c333-801e-0e7507a23...@gmail.com