sql >> Database >  >> RDS >> PostgreSQL

Verwijder rijen met externe sleutel in PostgreSQL

Om dit te automatiseren, kunt u de externe sleutelbeperking definiëren met ON DELETE CASCADE .
Ik citeer de de handleiding voor beperkingen voor externe sleutels :

Zoek de huidige FK-definitie als volgt op:

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

Voeg vervolgens de ON DELETE ... . toe of wijzig deze deel naar ON DELETE CASCADE (alle andere behouden zoals het is) in een verklaring als:

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

Er is geen ALTER CONSTRAINT opdracht. Laat de beperking vallen en creëer deze opnieuw in een enkele ALTER TABLE statement om mogelijke race-omstandigheden met gelijktijdige schrijftoegang te voorkomen.

Je hebt natuurlijk de privileges nodig om dit te doen. De operatie duurt een ACCESS EXCLUSIVE slot op tafel kontakty en een SHARE ROW EXCLUSIVE slot op tafel osoby .

Als je ALTER niet kunt de tabel, vervolgens handmatig verwijderen (eenmalig) of door trigger BEFORE DELETE (elke keer) zijn de overige opties.



  1. Converteer een complexe SQL-query naar SQLAlchemy

  2. Attributen extraheren uit XML-velden in SQL Server 2008-tabel

  3. MySQL Amazon RDS:Time-out voor vergrendelingswachttijd overschreden

  4. Toegang tot PostgreSQL-server vanuit LAN