sql >> Databáze >  >> RDS >> PostgreSQL

Odstraňte řádky s cizím klíčem v PostgreSQL

Chcete-li to automatizovat, můžete definovat omezení cizího klíče pomocí ON DELETE CASCADE .
Cituji příručku pro omezení cizího klíče :

Vyhledejte aktuální definici FK takto:

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

Poté přidejte nebo upravte ON DELETE ... část na ON DELETE CASCADE (zachování všeho ostatního tak, jak je) v příkazu jako:

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

Neexistuje žádné ALTER CONSTRAINT příkaz. Zrušte a znovu vytvořte omezení v jediné ALTER TABLE prohlášení, abyste se vyhnuli možným závodům se současným přístupem pro zápis.

K tomu samozřejmě potřebujete oprávnění. Operace vyžaduje ACCESS EXCLUSIVE zámek na stole kontakty a SHARE ROW EXCLUSIVE zámek na stůl osoby .

Pokud nemůžete ALTER tabulku a poté smazání ručně (jednou) nebo spouštěčem BEFORE DELETE (pokaždé) jsou zbývající možnosti.



  1. Získejte název volající procedury nebo funkce v Oracle PL/SQL

  2. počet proměnných Null na řádek mysql

  3. Je ORA_HASH společnosti Oracle náhodný?

  4. SQL select where not in subdotaz nevrací žádné výsledky