Внешние ключи в postgresql могут быть нарушены триггером

Я создал несколько таблиц в 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:

Нарушение ограничения может быть вызвано ошибочным триггером, см. ниже

20
задан Michael Clerx 27 May 2016 в 01:01
поделиться