David Rowley <dgrowleyml@xxxxxxxxx> writes: > On Sat, 17 Jul 2021 at 16:40, Justin Pryzby <pryzby@xxxxxxxxxxxxx> wrote: >> You could run a single UPDATE rather than 30k triggers. >> Or switch to an INSERT on the table, with an index on it, and call >> max(last_parent_table_change) from whatever needs to ingest it. And prune the >> old entries and vacuum it outside the transaction. Maybe someone else will >> have a better suggestion. > Maybe just change the UPDATE statement to: > UPDATE data_sync SET last_parent_table_change=CURRENT_TIMESTAMP WHERE > last_parent_table_change <> CURRENT_TIMESTAMP; > That should reduce the number of actual updates to 1 per transaction. Or, if it's impractical to make the application do that for itself, this could be a job for suppress_redundant_updates_trigger(). https://www.postgresql.org/docs/current/functions-trigger.html regards, tom lane