PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eliminare i dati da più tabelle?

Se hai il controllo sul tuo schema, farei in modo che lo schema utilizzi a cascata elimina .

Dall'articolo (la parte più pertinente tradotta per il tuo esempio)

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

Se hai impostato le cascate, puoi semplicemente eliminare dalla tabella degli eventi principale e tutte le altre tabelle verranno ripulite automaticamente

In caso contrario, è necessario eliminare prima tutti i riferimenti, quindi eliminare la tabella principale. Dovresti farlo in un'unica transazione per mantenere i dati coerenti

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;