pgsql: Obtain required table lock during cross-table constraint updates

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Obtain required table lock during cross-table constraint updates
Дата
Msg-id E1uVwGJ-003uhB-13@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Obtain required table lock during cross-table constraint updates.

Sometimes a table's constraint may depend on a column of another
table, so that we have to update the constraint when changing the
referenced column's type.  We need to have lock on the constraint's
table to do that.  ATPostAlterTypeCleanup believed that this case
was only possible for FOREIGN KEY constraints, but it's wrong at
least for CHECK and EXCLUDE constraints; and in general, we'd
probably need exclusive lock to alter any sort of constraint.
So just remove the contype check and acquire lock for any other
table.  This prevents a "you don't have lock" assertion failure,
though no ill effect is observed in production builds.

We'll error out later anyway because we don't presently support
physically altering column types within stored composite columns.
But the catalog-munging is basically all there, so we may as well
make that part work.

Bug: #18970
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Diagnosed-by: jian he <jian.universality@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/18970-a7d1cfe1f8d5d8d9@postgresql.org
Backpatch-through: 13

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/13f1e9f26a112623c07f55b88b87530649d7155d

Modified Files
--------------
src/backend/commands/tablecmds.c          | 21 +++++++++++----------
src/test/regress/expected/alter_table.out |  7 +++++++
src/test/regress/sql/alter_table.sql      |  9 +++++++++
3 files changed, 27 insertions(+), 10 deletions(-)


В списке pgsql-committers по дате отправления: