Stworzyłem kilka tabel w postgresie, dodałem klucz obcy z jednej tabeli do drugiej i ustawiłem DELETE na CASCADE. O dziwo, mam pewne pola, które wydają się naruszać to ograniczenie.Klucze obce w postgresql mogą zostać naruszone przez wyzwalacz
Czy to normalne zachowanie? A jeśli tak, to czy istnieje sposób, aby uzyskać pożądane zachowanie (bez naruszeń)?
Edit:
I orginaly utworzony klucz obcy w ramach CREATE TABLE, tylko przy użyciu
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Obecny kod pgAdmin3 daje się
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
Edit 2:
Aby wyjaśnić, mam podejrzenie, że ograniczenia są sprawdzane tylko przy aktualizacji s/inserty zdarzają się, ale nigdy potem nie są ponownie oglądane. Niestety nie wiem wystarczająco dużo na temat PostgreSQL, aby dowiedzieć się, czy jest to prawdą, czy też w jaki sposób pola mogą znaleźć się w bazie danych bez przeprowadzania tych kontroli.
Jeśli tak, czy jest jakiś sposób sprawdzenia wszystkich kluczy obcych i naprawienia tych problemów?
Edit 3:
naruszenie więzów może być spowodowane przez wadliwy wyzwalacz, patrz poniżej
tylko za sprawdzenie poprawności możesz wysłać oświadczenie użyte do utworzenia FK? –
W jakiej wersji PG jesteś? – Kuberchaun
Używam wersji 8.3 –