Commit 50ce8ab9 authored by Neil Conway's avatar Neil Conway

Revert changes to CREATE TRIGGER and ALTER TABLE ADD FOREIGN KEY locking,

per request from Tom.
parent 8abba638
<!--
$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>
......
......@@ -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
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment