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

Slet rækker med fremmednøgle i PostgreSQL

For at automatisere dette, kan du definere fremmednøgle-begrænsningen med ON DELETE CASCADE .
Jeg citerer manualen til udenlandske nøglebegrænsninger :

Slå den aktuelle FK-definition op sådan her:

SELECT pg_get_constraintdef(oid) AS constraint_def
FROM   pg_constraint
WHERE  conrelid = 'public.kontakty'::regclass  -- assuming public schema
AND    conname = 'kontakty_ibfk_1';

Tilføj eller rediger derefter ON DELETE ... del til ON DELETE CASCADE (bevare alt andet som det er) i en erklæring som:

ALTER TABLE kontakty
   DROP CONSTRAINT kontakty_ibfk_1
 , ADD  CONSTRAINT kontakty_ibfk_1
   FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;

Der er ingen ALTER CONSTRAINT kommando. Slip og genskab begrænsningen i en enkelt ALTER TABLE erklæring for at undgå mulige løbsforhold med samtidig skriveadgang.

Du har selvfølgelig brug for privilegierne til at gøre det. Handlingen tager en ACCESS EXCLUSIVE lås på bordet kontakty og en SHARE ROW EXCLUSIVE lås på bordet osoby .

Hvis du ikke kan ALTER tabellen og derefter slette manuelt (en gang) eller med trigger BEFORE DELETE (hver gang) er de resterende muligheder.



  1. Sådan fungerer SCHEMA_NAME() i SQL Server

  2. Opdatering ved hjælp af PDO-erklæring

  3. Ydeevneforskel i forespørgsel mellem cmd og workbench mysql

  4. mysql opdatere flere rækker, hver med sine egne værdier, med en CASE-sætning