Я создал несколько таблиц в postgres, добавил внешний ключ из одной таблицы в другую и установил ON DELETE на CASCADE. Как ни странно, у меня есть поля, которые, кажется, нарушают это ограничение.
Это нормальное поведение? И если да, то есть ли способ добиться желаемого поведения (никаких нарушений)?
Изменить:
Я изначально создал внешний ключ как часть CREATE TABLE, просто используя
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Текущий код pgAdmin3 дает
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
Редактировать 2:
Чтобы уточнить, У меня есть подозрение, что ограничения проверяются только тогда, когда происходят обновления / вставки, но затем никогда не просматриваются снова. К сожалению, я недостаточно знаю о postgres, чтобы узнать, правда ли это или как поля могут оказаться в базе данных без выполнения этих проверок.
Если это так, есть ли способ проверить все внешние ключи и исправить эти проблемы?
Редактировать 3:
Нарушение ограничения может быть вызвано ошибочным триггером, см. ниже