Doc: clarify locking requirements for ALTER TABLE ADD FOREIGN KEY.
authorTom Lane
Fri, 10 Apr 2020 17:12:58 +0000 (13:12 -0400)
committerTom Lane
Fri, 10 Apr 2020 17:12:58 +0000 (13:12 -0400)
The docs explained that a SHARE ROW EXCLUSIVE lock is needed on the
referenced table, but failed to say the same about the table being
altered.  Since the page says that ACCESS EXCLUSIVE lock is taken
unless otherwise stated, this left readers with the wrong conclusion.

Discussion: https://postgr.es/m/834603375.3470346.1586482852542@mail.yahoo.com

doc/src/sgml/ref/alter_table.sgml

index c0278000b1b95f9d368516fa5380ca79ad029abf..6a5f93585dab960fd9e897406404d8522b9f92e2 100644 (file)
@@ -99,9 +99,9 @@ ALTER TABLE [ IF EXISTS ] name
   
    ALTER TABLE changes the definition of an existing table.
    There are several subforms described below. Note that the lock level required
-   may differ for each subform. An ACCESS EXCLUSIVE lock is held
-   unless explicitly noted. When multiple subcommands are listed, the lock
-   held will be the strictest one required from any subcommand.
+   may differ for each subform. An ACCESS EXCLUSIVE lock is
+   acquired unless explicitly noted. When multiple subcommands are given, the
+   lock acquired will be the strictest one required by any subcommand.
 
   
    
@@ -313,8 +313,8 @@ ALTER TABLE [ IF EXISTS ] name
     ADD table_constraint [ NOT VALID ]
     
      
-      This form adds a new constraint to a table using the same syntax as
-      ">, plus the option NOT
+      This form adds a new constraint to a table using the same constraint
+      syntax as ">, plus the option NOT
       VALID, which is currently only allowed for foreign key
       and CHECK constraints.
      
@@ -335,6 +335,17 @@ ALTER TABLE [ IF EXISTS ] name
       endterm="sql-altertable-notes-title"> below for more information
       about using the NOT VALID option.
      
+
+     
+      Although most forms of ADD
+      table_constraint
+      require an ACCESS EXCLUSIVE lock, ADD
+      FOREIGN KEY requires only a SHARE ROW
+      EXCLUSIVE lock.  Note that ADD FOREIGN KEY
+      also acquires a SHARE ROW EXCLUSIVE lock on the
+      referenced table, in addition to the lock on the table on which the
+      constraint is declared.
+