PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como excluir dados de várias tabelas?


Se você tiver controle sobre seu esquema, eu faria com que o esquema usasse em cascata exclui .

Do artigo (a parte mais pertinente traduzida para o seu exemplo)
CREATE TABLE point
(
    pt_id integer PRIMARY KEY,
    evt_id integer REFERENCES event ON DELETE CASCADE
)

Se você tiver cascatas configuradas, basta excluir da tabela de eventos principal e todas as outras tabelas serão limpas automaticamente

Caso contrário, você precisa excluir todas as referências primeiro e, em seguida, excluir a tabela principal. Você deve fazer isso em uma transação para manter os dados consistentes
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;