PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come aggiungere i vincoli di eliminazione a cascata?

Sono abbastanza sicuro che non puoi semplicemente aggiungere on delete cascade a un vincolo di chiave esterna esistente. Devi prima eliminare il vincolo, quindi aggiungere la versione corretta. In SQL standard, credo che il modo più semplice per farlo sia

  • avviare una transazione,
  • rilascia la chiave esterna
  • aggiungi una chiave esterna con on delete cascade , e infine
  • commettere la transazione

Ripeti per ogni chiave esterna che desideri modificare.

Ma PostgreSQL ha un'estensione non standard che ti consente di utilizzare più clausole di vincolo in una singola istruzione SQL. Ad esempio

alter table public.scores
drop constraint scores_gid_fkey,
add constraint scores_gid_fkey
   foreign key (gid)
   references games(gid)
   on delete cascade;

Se non conosci il nome del vincolo di chiave esterna che desideri eliminare, puoi cercarlo in pgAdminIII (fai clic sul nome della tabella e guarda il DDL, oppure espandi la gerarchia finché non vedi "Vincoli"), oppure puoi interrogare lo schema delle informazioni.

select *
from information_schema.key_column_usage
where position_in_unique_constraint is not null