| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
| Subject: | pgsql: plpgsql: optimize "SELECT simple-expression INTO var". |
| Date: | 2026-03-20 22:23:52 |
| Message-ID: | E1w3iFz-000hor-1A@gemulon.postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | 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(at)sss(dot)pgh(dot)pa(dot)us>
Reviewed-by: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)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(-)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Paquier | 2026-03-21 05:50:11 | pgsql: Move declarations related to locktags from lock.h to new locktag |
| Previous Message | Jeff Davis | 2026-03-20 19:44:54 | pgsql: Fix dependency on FDW's connection function. |