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.
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.
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.
+