]> granicus.if.org Git - postgresql/commitdiff
Revert changes to CREATE TRIGGER and ALTER TABLE ADD FOREIGN KEY locking,
authorNeil Conway <neilc@samurai.com>
Thu, 24 Mar 2005 00:03:26 +0000 (00:03 +0000)
committerNeil Conway <neilc@samurai.com>
Thu, 24 Mar 2005 00:03:26 +0000 (00:03 +0000)
per request from Tom.

doc/src/sgml/mvcc.sgml
src/backend/commands/tablecmds.c
src/backend/commands/trigger.c

index 5982c22bd3339f74227c5edd6d841cfa2e3d01ca..462fa99cb959489e584a349d0a6eb8fa43165815 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/mvcc.sgml,v 2.48 2005/03/23 07:44:56 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/mvcc.sgml,v 2.49 2005/03/24 00:03:18 neilc Exp $
 -->
 
  <chapter id="mvcc">
@@ -677,10 +677,9 @@ SELECT SUM(value) FROM mytab WHERE class = 2;
        </para>
 
        <para>
-         Acquired by <command>CREATE TRIGGER</command> and
-         <command>ALTER TABLE ADD FOREIGN KEY</command>. 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
+         <productname>PostgreSQL</productname> command.  However it is
+         acquired on certain system catalogs in some operations.
        </para>
        </listitem>
       </varlistentry>
index 1a6c1f82625e0230ab56d01f841ada6472aa8c48..7c19bcd3363a2ab366b08ba30e58512e8561a813 100644 (file)
@@ -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
index 55333e1f4f108f5414fba3d3d1885aa52fccdafa..54e0eac26888654503413084e02af933345c30df 100644 (file)
@@ -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);