Вопросы к Поиску с Алисой
По умолчанию в PostgreSQL ограничения внешнего ключа проверяются в конце каждого запроса INSERT, UPDATE и DELETE. pgdocs.ru Если выполняются множественные изменения таблиц, то ограничения внешнего ключа должны сохраняться целостными всё это время. pgdocs.ru
Однако в некоторых случаях невозможно сохранить ограничения внешнего ключа между запросами. pgdocs.ru Например, если две таблицы имеют внешние ключи одна для другой, то невозможно выполнить INSERT для одной таблицы без того, чтобы вставляемая строка уже существовала в другой. pgdocs.ru
Для решения такой проблемы используют опцию внешнего ключа DEFERRABLE и выполняют оператор SET CONSTRAINTS, чтобы ограничения внешнего ключа проверялись только при окончании транзакции (выполнении commit). pgdocs.ru
Кроме того, при возникновении конфликта старых и новых данных можно либо ничего не делать (DO NOTHING), тогда возникнет предупреждение, либо обновить конфликтующую строчку (DO UPDATE). aristov.tech Для этого используют конструкцию ON CONFLICT. aristov.tech