sql >> Databasteknik >  >> RDS >> PostgreSQL

Ta bort rader med främmande nyckel i PostgreSQL

För att automatisera detta kan du definiera den främmande nyckeln med ON DELETE CASCADE .
Jag citerar handboken för främmande nyckelbegränsningar :

Slå upp den nuvarande FK-definitionen så här:

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

Lägg sedan till eller ändra ON DELETE ... del till ON DELETE CASCADE (bevara allt annat som det är) i ett uttalande 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;

Det finns ingen ALTER CONSTRAINT kommando. Släpp och återskapa begränsningen i en enda ALTER TABLE uttalande för att undvika möjliga tävlingsförhållanden med samtidig skrivåtkomst.

Du behöver privilegierna för att göra det, uppenbarligen. Åtgärden tar en ACCESS EXCLUSIVE lås på bordet kontakty och en SHARE ROW EXCLUSIVE lås på tabellen osoby .

Om du inte kan ALTER tabellen, radera sedan för hand (en gång) eller med trigger BEFORE DELETE (varje gång) är de återstående alternativen.



  1. hur säkra är SUB-utlåtanden

  2. Beställ efter FÄLT i MYSQL

  3. SQL-prestandajustering för Oracle Many OR vs IN ()

  4. rad till kolumn konvertering i mysql