Ответ
В PostgreSQL, если при создании внешнего ключа не указано действие ON DELETE явно, по умолчанию применяется NO ACTION. Это предотвращает удаление записи в родительской таблице, если на неё существуют ссылки в дочерней.
Пример с поведением по умолчанию:
CREATE TABLE authors (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE books (
id SERIAL PRIMARY KEY,
author_id INTEGER REFERENCES authors(id) -- Подразумевается ON DELETE NO ACTION
);
-- DELETE FROM authors WHERE id = 1; -- Вызовет ошибку, если у автора есть книги.
Важное отличие от RESTRICT: В PostgreSQL NO ACTION и RESTRICT схожи, но NO ACTION проверяет ограничение в конце операции (отложенная проверка, если транзакция не завершена), а RESTRICT — немедленно. На практике при DELETE без отложенных ограничений разницы нет.