sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminar filas con clave externa en PostgreSQL

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.