Para automatizar esto, puede definir la restricción de clave externa con ON DELETE CASCADE
.
Cito el el manual para restricciones de clave externa
:
Busque la definición actual de FK de esta manera:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Luego agregue o modifique el ON DELETE ...
parte a ON DELETE CASCADE
(preservando todo lo demás como está) en una declaración 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;
No hay ALTER CONSTRAINT
dominio. Suelte y vuelva a crear la restricción en un solo ALTER TABLE
para evitar posibles condiciones de carrera con acceso de escritura simultáneo.
Necesitas los privilegios para hacerlo, obviamente. La operación toma un ACCESS EXCLUSIVE
bloquear en la tabla kontakty
y un SHARE ROW EXCLUSIVE
bloquear en la tabla osoby
.
Si no puede ALTER
la tabla, luego borrando a mano (una vez) o por disparador BEFORE DELETE
(cada vez) son las opciones restantes.