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

¿Cómo eliminar datos de varias tablas?

Si tiene control sobre su esquema, haría que el esquema use en cascada elimina .

Del artículo (la parte más pertinente traducida para su ejemplo)

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

Si tiene cascadas configuradas, simplemente puede eliminarlas de la mesa de eventos principal y todas las demás mesas se limpiarán automáticamente

De lo contrario, primero debe eliminar todas las referencias y luego eliminar la tabla principal. Debe hacer esto en una transacción para mantener la coherencia de los datos

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;