pgsql: Consider syntactic form when disambiguating function vs column r

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Consider syntactic form when disambiguating function vs column r
Date: 2018-06-18 15:39:47
Message-ID: E1fUwFv-0001d3-1L@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Consider syntactic form when disambiguating function vs column reference.

Postgres has traditionally considered the syntactic forms f(x) and x.f
to be equivalent, allowing tricks such as writing a function and then
using it as though it were a computed-on-demand column. However, our
behavior when both interpretations are feasible left something to be
desired: we always chose the column interpretation. This could lead
to very surprising results, as in a recent bug report from Neil Conway.
It also created a dump-and-reload hazard, since what was a function
call in a dumped view could get interpreted as a column reference
at reload, if a matching column name had been added to the underlying
table since the view was created.

What seems better, in ambiguous situations, is to prefer the choice
matching the syntactic form of the reference. This seems much less
astonishing in general, and it fixes the dump/reload hazard.

Although this could be called a bug fix, there have been few complaints
and there's some small risk of breaking applications that depend on the
old behavior, so no back-patch. It does seem reasonable to slip it
into v11, though.

Discussion: https://postgr.es/m/CAOW5sYa3Wp7KozCuzjOdw6PiOYPi6D=VvRybtH2S=2C0SVmRmA@mail.gmail.com

Branch
------
master

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

Modified Files
--------------
doc/src/sgml/rowtypes.sgml | 9 ++-
src/backend/parser/parse_func.c | 125 ++++++++++++++++++++-------------
src/test/regress/expected/rowtypes.out | 44 ++++++++++++
src/test/regress/sql/rowtypes.sql | 20 ++++++
4 files changed, 148 insertions(+), 50 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2018-06-18 15:57:38 pgsql: Remove obsolete prohibition on function name matching a column n
Previous Message Thomas Munro 2018-06-18 06:34:08 pgsql: Add PGTYPESchar_free() to avoid cross-module problems on Windows