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

Come scrivere una regola di eliminazione su una vista?

Quello che stai vedendo con il problema delle regole è che il sistema di regole non gestisce i dati in modo atomico. La prima eliminazione viene eseguita indipendentemente dall'ordine delle due istruzioni nella regola DO INSTEAD. La seconda istruzione non viene mai eseguita, perché la riga a cui fa riferimento OLD.id è stata rimossa dalla vista. Potresti usare un LEFT JOIN, ma questo non ti aiuterà a causa del design della tabella di esempio (potrebbe funzionare sullo schema del tuo database effettivo).

Il problema fondamentale, a mio avviso, è che stai trattando il sistema di regole come se fosse un fattore scatenante.

La tua migliore opzione è usare chiavi esterne e ON DELETE CASCADE invece di regole. Con loro funzionerebbe anche il tuo schema di esempio:avresti solo bisogno di eliminare per la tabella padre per sbarazzarsi di tutti i figli.