egdb3_11_7
.action_trigger
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
purge_events()
Parameters
Name
Type
Mode
IN
Definition
/** * Deleting expired events without simultaneously deleting their outputs * creates orphaned outputs. Deleting their outputs and all of the events * linking back to them, plus any outputs those events link to is messy and * inefficient. It's simpler to handle them in 2 sweeping steps. * * 1. Delete expired events. * 2. Delete orphaned event outputs. * * This has the added benefit of removing outputs that may have been * orphaned by some other process. Such outputs are not usuable by * the system. * * This does not guarantee that all events within an event group are * purged at the same time. In such cases, the remaining events will * be purged with the next instance of the purge (or soon thereafter). * This is another nod toward efficiency over completeness of old * data that's circling the bit bucket anyway. */ BEGIN DELETE FROM action_trigger.event WHERE id IN ( SELECT evt.id FROM action_trigger.event evt JOIN action_trigger.event_definition def ON (def.id = evt.event_def) WHERE def.retention_interval IS NOT NULL AND evt.state <> 'pending' AND evt.update_time < (NOW() - def.retention_interval) ); WITH linked_outputs AS ( SELECT templates.id AS id FROM ( SELECT DISTINCT(template_output) AS id FROM action_trigger.event WHERE template_output IS NOT NULL UNION SELECT DISTINCT(error_output) AS id FROM action_trigger.event WHERE error_output IS NOT NULL UNION SELECT DISTINCT(async_output) AS id FROM action_trigger.event WHERE async_output IS NOT NULL ) templates ) DELETE FROM action_trigger.event_output WHERE id NOT IN (SELECT id FROM linked_outputs); END;