]> granicus.if.org Git - postgresql/commit
Fix ALTER TABLE / SET TYPE for irregular inheritance
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 9 Jan 2017 22:26:58 +0000 (19:26 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 9 Jan 2017 22:26:58 +0000 (19:26 -0300)
commit4d4ab6ccd8a24a91ef9fc1904f0e80a2fd0377fe
tree8477c1f314b0793db356de7d9fb03ea8f9927d66
parented8e8b8149220809881d7a275104621fddc36289
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
src/backend/access/common/tupconvert.c
src/backend/commands/tablecmds.c
src/include/access/tupconvert.h
src/test/regress/expected/alter_table.out
src/test/regress/sql/alter_table.sql