pgsql: Fix ALTER TABLE / SET TYPE for irregular inheritance

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix ALTER TABLE / SET TYPE for irregular inheritance
Date: 2017-01-09 22:27:54
Message-ID: E1cQiPy-0008VG-1H@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix ALTER TABLE / SET TYPE for irregular inheritance

If inherited tables don't have exactly the same schema, the USING clause
in an ALTER TABLE / SET DATA TYPE misbehaves when applied to the
children tables since commit 9550e8348b79. Starting with that commit,
the attribute numbers in the USING expression are fixed during parse
analysis. This can lead to bogus errors being reported during
execution, such as:
ERROR: attribute 2 has wrong type
DETAIL: Table has type smallint, but query expects integer.

Since it wouldn't do to revert to the original coding, we now apply a
transformation to map the attribute numbers to the correct ones for each
child.

Reported by Justin Pryzby
Analysis by Tom Lane; patch by me.
Discussion: https://postgr.es/m/20170102225618.GA10071@telsasoft.com

Branch
------
REL9_6_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/4e563a1f6532decf7949324d313f264a4ed38622

Modified Files
--------------
src/backend/access/common/tupconvert.c | 110 ++++++++++++++++++------------
src/backend/commands/tablecmds.c | 66 ++++++++++++++++--
src/include/access/tupconvert.h | 4 ++
src/test/regress/expected/alter_table.out | 22 ++++++
src/test/regress/sql/alter_table.sql | 22 ++++++
5 files changed, 175 insertions(+), 49 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2017-01-09 22:47:48 pgsql: Fix error handling in pltcl_returnnext.
Previous Message Alvaro Herrera 2017-01-09 21:20:35 pgsql: BRIN revmap pages are not standard pages ...