PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Excluir linhas com chave estrangeira no PostgreSQL


Para automatizar isso, você pode definir a restrição de chave estrangeira com ON DELETE CASCADE .
Cito o manual para restrições de chave estrangeira :

Procure a definição FK atual assim:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM   pg_constraint
WHERE  conrelid = 'public.kontakty'::regclass  -- assuming public schema
AND    conname = 'kontakty_ibfk_1';

Em seguida, adicione ou modifique o ON DELETE ... parte para ON DELETE CASCADE (preservando todo o resto como está) em uma declaração como:
ALTER TABLE kontakty
   DROP CONSTRAINT kontakty_ibfk_1
 , ADD  CONSTRAINT kontakty_ibfk_1
   FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;

Não há ALTER CONSTRAINT comando. Solte e recrie a restrição em um único ALTER TABLE para evitar possíveis condições de corrida com acesso de gravação simultâneo.

Você precisa dos privilégios para fazê-lo, obviamente. A operação leva um ACCESS EXCLUSIVE bloquear na tabela kontakty e um SHARE ROW EXCLUSIVE travar na tabela osoby .

Se você não puder ALTER a tabela e, em seguida, excluindo manualmente (uma vez) ou pelo gatilho BEFORE DELETE (todas as vezes) são as opções restantes.