PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lösche ich Daten aus mehreren Tabellen?

Wenn Sie die Kontrolle über Ihr Schema haben, würde ich dafür sorgen, dass das Schema Cascading verwendet löscht .

Aus dem Artikel (der relevantere Teil wurde für Ihr Beispiel übersetzt)

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

Wenn Sie Kaskaden eingerichtet haben, können Sie einfach aus der Hauptereignistabelle löschen und alle anderen Tabellen werden automatisch bereinigt

Andernfalls müssen Sie zuerst alle Referenzen löschen und dann die Haupttabelle löschen. Sie sollten dies in einer Transaktion tun, um die Daten konsistent zu halten

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;