pgsql: Don't use_physical_tlist for an IOS with non-returnable columns.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Don't use_physical_tlist for an IOS with non-returnable columns.
Date: 2022-02-11 20:24:22
Message-ID: E1nIcSs-0007jj-Bn@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Don't use_physical_tlist for an IOS with non-returnable columns.

createplan.c tries to save a runtime projection step by specifying
a scan plan node's output as being exactly the table's columns, or
index's columns in the case of an index-only scan, if there is not a
reason to do otherwise. This logic did not previously pay attention
to whether an index's columns are returnable. That worked, sort of
accidentally, until commit 9a3ddeb51 taught setrefs.c to reject plans
that try to read a non-returnable column. I have no desire to loosen
setrefs.c's new check, so instead adjust use_physical_tlist() to not
try to optimize this way when there are non-returnable column(s).

Per report from Ryan Kelly. Like the previous patch, back-patch
to all supported branches.

Discussion: https://postgr.es/m/CAHUie24ddN+pDNw7fkhNrjrwAX=fXXfGZZEHhRuofV_N_ftaSg@mail.gmail.com

Branch
------
master

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

Modified Files
--------------
src/backend/optimizer/plan/createplan.c | 16 ++++++++++++++++
src/test/regress/expected/gist.out | 16 ++++++++++++++++
src/test/regress/sql/gist.sql | 5 +++++
3 files changed, 37 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2022-02-11 21:21:40 pgsql: Fix DROP {DATABASE,TABLESPACE} on Windows.
Previous Message Daniel Gustafsson 2022-02-11 19:58:57 pgsql: Replace Test::More plans with done_testing