Remove small inefficiency in ExecARDeleteTriggers/ExecARUpdateTriggers.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 65158f497a7d7523ad438b2034d01a560fafe6bd
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2021-03-31T00:01:31Z
Releases: 14.0
Remove small inefficiency in ExecARDeleteTriggers/ExecARUpdateTriggers.

Whilst poking at nodeModifyTable.c, I chanced to notice that while
its calls to ExecBR*Triggers and ExecIR*Triggers are protected by
tests to see if there are any relevant triggers to fire, its calls
to ExecAR*Triggers are not; the latter functions do the equivalent
tests themselves.  This seems possibly reasonable given the more
complex conditions involved, but what's less reasonable is that
the ExecAR* functions aren't careful to do no work when there is
no work to be done.  ExecARInsertTriggers gets this right, but the
other two will both force creation of a slot that the query may
have no use for.  ExecARUpdateTriggers additionally performed a
usually-useless ExecClearTuple() on that slot.  This is probably
all pretty microscopic in real workloads, but a cycle shaved is a
cycle earned.

Files

PathChange+/−
src/backend/commands/trigger.c modified +6 −4