Ho creato alcune tabelle in postgres, aggiunto una chiave esterna da una tabella a un'altra e impostato ON DELETE su CASCADE. Stranamente, ho alcuni campi che sembrano violare questo vincolo.Le chiavi esterne in postgresql possono essere violate dal trigger
È normale? E se è così, c'è un modo per ottenere il comportamento che voglio (nessuna violazione possibile)?
Edit:
ho orginaly creato la chiave esterna come parte di CREATE TABLE, usando solo
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Il codice corrente pgAdmin3 dà è
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
Edit 2:
Per chiarire, ho un vago sospetto che i vincoli vengano controllati solo quando si aggiorna s/inserts capita ma non vengono mai più guardati. Sfortunatamente non conosco abbastanza su postgres per scoprire se questo è vero o come i campi potrebbero finire nel database senza che questi controlli vengano eseguiti.
Se questo è il caso, c'è un modo per controllare tutte le chiavi esterne e risolvere questi problemi?
Edit 3:
Una violazione di vincolo può essere causato da un trigger difettosa, vedi sotto
solo per un controllo di integrità puoi pubblicare la dichiarazione che hai usato per creare l'FK? –
Quale versione di PG sei? – Kuberchaun
Sto usando la versione 8.3 –