pgsql: Revert applying column aliases to the output of whole-row Vars.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Revert applying column aliases to the output of whole-row Vars.
Дата
Msg-id E1nUyRy-000BFt-BM@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Revert applying column aliases to the output of whole-row Vars.

In commit bf7ca1587, I had the bright idea that we could make the
result of a whole-row Var (that is, foo.*) track any column aliases
that had been applied to the FROM entry the Var refers to.  However,
that's not terribly logically consistent, because now the output of
the Var is no longer of the named composite type that the Var claims
to emit.  bf7ca1587 tried to handle that by changing the output
tuple values to be labeled with a blessed RECORD type, but that's
really pretty disastrous: we can wind up storing such tuples onto
disk, whereupon they're not readable by other sessions.

The only practical fix I can see is to give up on what bf7ca1587
tried to do, and say that the column names of tuples produced by
a whole-row Var are always those of the underlying named composite
type, query aliases or no.  While this introduces some inconsistencies,
it removes others, so it's not that awful in the abstract.  What *is*
kind of awful is to make such a behavioral change in a back-patched
bug fix.  But corrupt data is worse, so back-patched it will be.

(A workaround available to anyone who's unhappy about this is to
introduce an extra level of sub-SELECT, so that the whole-row Var is
referring to the sub-SELECT's output and not to a named table type.
Then the Var is of type RECORD to begin with and there's no issue.)

Per report from Miles Delahunty.  The faulty commit dates to 9.5,
so back-patch to all supported branches.

Discussion: https://postgr.es/m/2950001.1638729947@sss.pgh.pa.us

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1f5ef5ae0806cb75bb0297e46e41765ffa426252

Modified Files
--------------
src/backend/executor/execExpr.c        |  8 ++--
src/backend/executor/execExprInterp.c  | 72 ++++++++++++++++------------------
src/backend/executor/execTuples.c      | 37 ++++++-----------
src/test/regress/expected/rowtypes.out | 23 +----------
src/test/regress/sql/rowtypes.sql      |  6 +--
5 files changed, 54 insertions(+), 92 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tomas Vondra
Дата:
Сообщение: Re: pgsql: Fix row filters with multiple publications
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Don't bother to attach column name lists to RowExprs of named ty