PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment supprimer des données de plusieurs tables ?

Si vous contrôlez votre schéma, je ferais en sorte que le schéma utilise cascading supprime .

De l'article (la partie la plus pertinente traduite pour votre exemple)

CREATE TABLE point
(
    pt_id integer PRIMARY KEY,
    evt_id integer REFERENCES event ON DELETE CASCADE
)

Si vous avez configuré des cascades, vous pouvez simplement supprimer de la table d'événements principale et toutes les autres tables seront nettoyées automatiquement

Sinon, vous devez d'abord supprimer toutes les références, puis supprimer la table principale. Vous devez le faire en une seule transaction pour assurer la cohérence des données

BEGIN;
DELETE FROM trace WHERE EXISTS 
    (SELECT 1 FROM point WHERE evt_id = 1139 AND trace.pt_id = point.pt_id);
DELETE FROM point where evt_id = 1139;
DELETE FROM magnitude where evt_id = 1139;
DELETE FROM event where evt_id = 1139;
COMMIT;