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.
- Addition of a foreign key constraint requires a
- SHARE ROW EXCLUSIVE lock on the referenced table,
- in addition to the lock on the table receiving the constraint.
+ 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.