Thread: pgsql: Make DDL operations play nicely with Serializable Snapshot Isola
pgsql: Make DDL operations play nicely with Serializable Snapshot Isola
From
Heikki Linnakangas
Date:
Make DDL operations play nicely with Serializable Snapshot Isolation. Truncating or dropping a table is treated like deletion of all tuples, and check for conflicts accordingly. If a table is clustered or rewritten by ALTER TABLE, all predicate locks on the heap are promoted to relation-level locks, because the tuple or page ids of any existing tuples will change and won't be valid after rewriting the table. Arguably ALTER TABLE should be treated like a mass-UPDATE of every row, but if you e.g change the datatype of a column, you could also argue that it's just a change to the physical layout, not a logical change. Reindexing promotes all locks on the index to relation-level lock on the heap. Kevin Grittner, with a lot of cosmetic changes by me. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/8f9622bbb3c02b06176760c3ca2d33c5b5f629a7 Modified Files -------------- src/backend/catalog/heap.c | 9 + src/backend/catalog/index.c | 13 + src/backend/commands/cluster.c | 9 + src/backend/commands/tablecmds.c | 19 + src/backend/storage/lmgr/predicate.c | 521 ++++++++++++++++++++++++----- src/include/storage/predicate.h | 2 + src/include/storage/predicate_internals.h | 6 +- 7 files changed, 499 insertions(+), 80 deletions(-)