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.