pgsql: For inplace update, send nontransactional invalidations.
От | Noah Misch |
---|---|
Тема | pgsql: For inplace update, send nontransactional invalidations. |
Дата | |
Msg-id | E1t4KjF-002OMl-4o@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
For inplace update, send nontransactional invalidations. The inplace update survives ROLLBACK. The inval didn't, so another backend's DDL could then update the row without incorporating the inplace update. In the test this fixes, a mix of CREATE INDEX and ALTER TABLE resulted in a table with an index, yet relhasindex=f. That is a source of index corruption. Back-patch to v12 (all supported versions). The back branch versions don't change WAL, because those branches just added end-of-recovery SIResetAll(). All branches change the ABI of extern function PrepareToInvalidateCacheTuple(). No PGXN extension calls that, and there's no apparent use case in extensions. Reviewed by Nitin Motiani and (in earlier versions) Andres Freund. Discussion: https://postgr.es/m/20240523000548.58.nmisch@google.com Branch ------ REL_16_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/ce8c571d014e0abf2c1e4f5c3fd5d80783be4fa7 Modified Files -------------- src/backend/access/heap/heapam.c | 43 +++- src/backend/access/transam/xact.c | 26 ++- src/backend/catalog/index.c | 11 +- src/backend/replication/logical/decode.c | 26 +-- src/backend/utils/cache/catcache.c | 7 +- src/backend/utils/cache/inval.c | 304 ++++++++++++++++++-------- src/backend/utils/cache/syscache.c | 3 +- src/include/utils/catcache.h | 3 +- src/include/utils/inval.h | 6 + src/test/isolation/expected/inplace-inval.out | 10 +- src/test/isolation/specs/inplace-inval.spec | 12 +- src/tools/pgindent/typedefs.list | 1 + 12 files changed, 320 insertions(+), 132 deletions(-)
В списке pgsql-committers по дате отправления: