Действия при обновлении или удалении первичного ключа

Внешний ключ — это столбец или группа столбцов в таблице, которые ссылаются на первичный ключ другой таблицы.

Есть несколько действий, которые можно указать при обновлении или удалении первичного ключа. Но т.к. обновление используется редко, то сосредоточим наше внимание на удалении.

PostgreSQL поддерживает следующие действия:

  • SET NULL
  • SET DEFAULT
  • RESTRICT
  • NO ACTION
  • CASCADE

NO ACTION

Не выполнять никаких действий. Но при попытке удаления вы получите ошибку ограничения violates foreign key constraint.

RESTRICT

Аналогично NO ACTION. Разница возникает только тогда, когда вы определяете ограничение внешнего ключа как DEFERRABLE в режиме INITIALLY DEFERRED или INITIALLY IMMEDIATE. IMMEDIATE ограничения проверяются в конце каждого оператора. DEFERRED ограничения не проверяются, пока транзакция не будет завершена. У каждого ограничения есть свой режим IMMEDIATE или DEFERRED.

SET NULL

Автоматически устанавливает значение NULL для столбцов внешнего ключа в ссылочных строках дочерней таблицы при удалении ссылочных строк в родительской таблице.

CASCADE

Автоматически удаляет все ссылающиеся строки в дочерней таблице при удалении ссылочных строк в родительской таблице. На практике чаще всего используется именно это действие.

SET DEFAULT

Устанавливает значение по умолчанию для столбца внешнего ключа ссылочных строк в дочерней таблице при удалении ссылочных строк из родительской таблицы.

https://www.postgresqltutorial.com/postgresql-foreign-key/