summaryrefslogtreecommitdiff
path: root/src/backend/access/gist/gistvalidate.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-11-22 15:02:18 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2019-11-22 15:02:18 -0500
commit73b06cf893c9d3bb38c11878a12cc29407e78b6c (patch)
treeb6d9a147dfd50483431b6a996da03a32bf6b1789 /src/backend/access/gist/gistvalidate.c
parentf67b173771a0525ff7f2010d2d57d63d7f546352 (diff)
downloadpostgresql-73b06cf893c9d3bb38c11878a12cc29407e78b6c.tar.gz
Avoid taking a new snapshot for an immutable simple expression in plpgsql.
We already used this optimization if the plpgsql function is read-only. But it seems okay to do it even in a read-write function, if the expression contains only immutable functions/operators. There would only be a change of behavior if an "immutable" called function depends on seeing database updates made during the current plpgsql function. That's enough of a violation of the promise of immutability that anyone who complains won't have much of a case. The benefits are significant --- for simple cases like while i < 10000000 loop i := i + 1; end loop; I see net performance improvements around 45%. Of course, real-world cases won't get that much faster, but it ought to be noticeable. At the very least, this removes much of the performance penalty that used to exist for forgetting to mark a plpgsql function non-volatile. Konstantin Knizhnik, reviewed by Pavel Stehule, cosmetic changes by me Discussion: https://postgr.es/m/ed9da20e-01aa-d04b-d085-e6c16b14b9d7@postgrespro.ru
Diffstat (limited to 'src/backend/access/gist/gistvalidate.c')
0 files changed, 0 insertions, 0 deletions