Я создал несколько таблиц в postgres, добавил внешний ключ из одной таблицы в другую и установил ON DELETE в CASCADE. Как ни странно, у меня есть некоторые поля, которые, по-видимому, нарушают это ограничение.
Это нормальное поведение? И если да, есть ли способ получить поведение, которое я хочу (возможны нарушения)?
Edit:
I orginaly создал внешний ключ как часть 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:
Нарушение ограничения может быть вызвано неисправным триггером, см. ниже