From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix reporting of column typmods for multi-row VALUES constructs. |
Date: | 2016-12-09 17:01:50 |
Message-ID: | E1cFOYQ-0006Dl-DB@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix reporting of column typmods for multi-row VALUES constructs.
expandRTE() and get_rte_attribute_type() reported the exprType() and
exprTypmod() values of the expressions in the first row of the VALUES as
being the column type/typmod returned by the VALUES RTE. That's fine for
the data type, since we coerce all expressions in a column to have the same
common type. But we don't coerce them to have a common typmod, so it was
possible for rows after the first one to return values that violate the
claimed column typmod. This leads to the incorrect result seen in bug
#14448 from Hassan Mahmood, as well as some other corner-case misbehaviors.
The desired behavior is the same as we use in other type-unification
cases: report the common typmod if there is one, but otherwise return -1
indicating no particular constraint.
We fixed this in HEAD by deriving the typmods during transformValuesClause
and storing them in the RTE, but that's not a feasible solution in the back
branches. Instead, just use a brute-force approach of determining the
correct common typmod during expandRTE() and get_rte_attribute_type().
Simple testing says that that doesn't really cost much, at least not in
common cases where expandRTE() is only used once per query. It turns out
that get_rte_attribute_type() is typically never used at all on VALUES
RTEs, so the inefficiency there is of no great concern.
Report: https://postgr.es/m/20161205143037.4377.60754@wrigleys.postgresql.org
Discussion: https://postgr.es/m/27429.1480968538@sss.pgh.pa.us
Branch
------
REL9_4_STABLE
Details
-------
http://git.postgresql.org/pg/commitdiff/c7a62135acfb951d2e6ca6c0cfc71ef4ed08f3bc
Modified Files
--------------
src/backend/parser/parse_relation.c | 101 ++++++++++++++++++++++++++++--
src/test/regress/expected/create_view.out | 37 +++++++++++
src/test/regress/sql/create_view.sql | 13 ++++
3 files changed, 147 insertions(+), 4 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Keith Fiske | 2016-12-09 18:00:27 | Re: [COMMITTERS] pgsql: Implement table partitioning. |
Previous Message | Alvaro Herrera | 2016-12-09 15:44:28 | pgsql: Fix crasher bug in array_position(s) |