From 98a660d0b7411230c940c7e7ea052e11b6924d39 Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Wed, 20 May 2020 16:15:17 +0300 Subject: [PATCH] Don't release lock on pg_constraint until the xact ends Do not release AccessShareLock when closing pg_constraint to prevent modifications to be done on pg_constraint to make sure that caller will process valid foreign key constraints through the transaction. --- src/backend/distributed/commands/foreign_constraint.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/commands/foreign_constraint.c b/src/backend/distributed/commands/foreign_constraint.c index 6a8e22353..a77d07cd4 100644 --- a/src/backend/distributed/commands/foreign_constraint.c +++ b/src/backend/distributed/commands/foreign_constraint.c @@ -437,7 +437,7 @@ ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid relationId) /* clean up scan and close system catalog */ systable_endscan(scanDescriptor); - heap_close(pgConstraint, AccessShareLock); + heap_close(pgConstraint, NoLock); return foreignKeyToReferenceTableIncludesGivenColumn; } @@ -763,7 +763,13 @@ GetForeignKeyOids(Oid relationId, int flags) } systable_endscan(scanDescriptor); - heap_close(pgConstraint, AccessShareLock); + + /* + * Do not release AccessShareLock yet to prevent modifications to be done + * on pg_constraint to make sure that caller will process valid foreign key + * constraints through the transaction. + */ + heap_close(pgConstraint, NoLock); return foreignKeyOids; }