From: Neil Conway Date: Thu, 24 Mar 2005 00:03:26 +0000 (+0000) Subject: Revert changes to CREATE TRIGGER and ALTER TABLE ADD FOREIGN KEY locking, X-Git-Tag: REL8_1_0BETA1~1135 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=50ce8ab9fcd49dfcbff9e19c5aa53efe0fc6dc6e;p=postgresql Revert changes to CREATE TRIGGER and ALTER TABLE ADD FOREIGN KEY locking, per request from Tom. --- diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 5982c22bd3..462fa99cb9 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.sgml @@ -1,5 +1,5 @@ @@ -677,10 +677,9 @@ SELECT SUM(value) FROM mytab WHERE class = 2; - Acquired by CREATE TRIGGER and - ALTER TABLE ADD FOREIGN KEY. This lock - mode can also be acquired on certain system catalogs in some - operations. + This lock mode is not automatically acquired on user tables by any + PostgreSQL command. However it is + acquired on certain system catalogs in some operations. diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1a6c1f8262..7c19bcd336 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.149 2005/03/23 07:44:57 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.150 2005/03/24 00:03:22 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -3829,13 +3829,13 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel, Oid constrOid; /* - * Grab a lock on the pk table, so that someone doesn't delete - * rows out from under us. We will eventually need to add triggers - * to the table, at which point we'll need to an ExclusiveLock -- - * therefore we grab an ExclusiveLock now to prevent possible - * deadlock. + * Grab an exclusive lock on the pk table, so that someone doesn't + * delete rows out from under us. (Although a lesser lock would do for + * that purpose, we'll need exclusive lock anyway to add triggers to + * the pk table; trying to start with a lesser lock will just create a + * risk of deadlock.) */ - pkrel = heap_openrv(fkconstraint->pktable, ExclusiveLock); + pkrel = heap_openrv(fkconstraint->pktable, AccessExclusiveLock); /* * Validity and permissions checks diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 55333e1f4f..54e0eac268 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.179 2005/03/23 07:44:57 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.180 2005/03/24 00:03:26 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -87,14 +87,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) ObjectAddress myself, referenced; - /* - * We need to prevent concurrent CREATE TRIGGER commands, as well - * as concurrent table modifications (INSERT, DELETE, UPDATE), so - * acquire an ExclusiveLock -- it should be fine to allow SELECTs - * to proceed. We could perhaps acquire ShareRowExclusiveLock, but - * there seems little gain in allowing SELECT FOR UPDATE. - */ - rel = heap_openrv(stmt->relation, ExclusiveLock); + rel = heap_openrv(stmt->relation, AccessExclusiveLock); if (stmt->constrrel != NULL) constrrelid = RangeVarGetRelid(stmt->constrrel, false);