pgsql: plpgsql: optimize "SELECT simple-expression INTO var". - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: plpgsql: optimize "SELECT simple-expression INTO var".
Date
Msg-id E1w3iFz-000hor-1A@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
plpgsql: optimize "SELECT simple-expression INTO var".

Previously, we always fed SELECT ... INTO to the SPI machinery.
While that works for all cases, it's a great deal slower than
the otherwise-equivalent "var := expression" if the expression
is "simple" and the INTO target is a single variable.  Users
coming from MSSQL or T_SQL are likely to be surprised by this;
they are used to writing SELECT ... INTO since there is no
"var := expression" syntax in those dialects.  Hence, check for
a simple expression and use the faster code path if possible.

(Here, "simple" means whatever exec_is_simple_query accepts,
which basically means "SELECT scalar-expression" without any
input tables, aggregates, qual clauses, etc.)

This optimization is not entirely transparent.  Notably, one of
the reasons it's faster is that the hooks that pg_stat_statements
uses aren't called in this path, so that the evaluated expression
no longer appears in pg_stat_statements output as it did before.
There may be some other minor behavioral changes too, although
I tried hard to make error reporting look the same.  Hopefully,
none of them are significant enough to not be acceptable as
routine changes in a PG major version.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Discussion: https://postgr.es/m/CAFj8pRDieSQOPDHD_svvR75875uRejS9cN87FoAC3iXMXS1saQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ce8d5fe0e2802158b65699aeae1551d489948167

Modified Files
--------------
.../pg_stat_statements/expected/level_tracking.out |   8 +-
contrib/pg_stat_statements/expected/plancache.out  |   6 +-
src/pl/plpgsql/src/expected/plpgsql_simple.out     |  19 ++++
src/pl/plpgsql/src/pl_exec.c                       | 100 +++++++++++++++++++++
src/pl/plpgsql/src/sql/plpgsql_simple.sql          |  17 ++++
5 files changed, 141 insertions(+), 9 deletions(-)


pgsql-committers by date:

Previous
From: Jeff Davis
Date:
Subject: pgsql: Fix dependency on FDW's connection function.
Next
From: Michael Paquier
Date:
Subject: pgsql: Move declarations related to locktags from lock.h to new locktag