]> granicus.if.org Git - postgresql/commit - src/pl/plpgsql/src/pl_comp.c
Speed up plpgsql trigger startup by introducing "promises".
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Feb 2018 00:20:37 +0000 (19:20 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Feb 2018 00:20:37 +0000 (19:20 -0500)
commitfd333bc763ea104f2a2c10c6b0061c996d4a2f5a
treeb0d1d82c19da20d2df880de248ee8be8b732e903
parent40301c1c8bcbe92a9ba9bf017da03e83476ae0e5
Speed up plpgsql trigger startup by introducing "promises".

Over the years we've accreted quite a few special variables that are
predefined in plpgsql trigger functions.  The cost of initializing these
variables to their defined values turns out to be a significant part of
the runtime of simple triggers; but, undoubtedly, most real-world triggers
never examine the values of most of these variables.

To improve matters, invent the notion of a variable that has a "promise"
attached to it, specifying which of the predetermined values should be
assigned to the variable if anything ever reads it.  This eliminates all
the unneeded startup overhead, in return for a small penalty on accesses
to these variables.

Tom Lane, reviewed by Pavel Stehule

Discussion: https://postgr.es/m/11986.1514407114@sss.pgh.pa.us
src/pl/plpgsql/src/pl_comp.c
src/pl/plpgsql/src/pl_exec.c
src/pl/plpgsql/src/pl_funcs.c
src/pl/plpgsql/src/pl_gram.y
src/pl/plpgsql/src/plpgsql.h