]> granicus.if.org Git - postgresql/commit
Fix handling of extended statistics during ALTER COLUMN TYPE.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 14 May 2017 16:22:16 +0000 (12:22 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 14 May 2017 16:22:25 +0000 (12:22 -0400)
commitb5b0db19b895f033ada35bc7c337183be7356977
tree2ef2429aaf1963d59d440462f65a53a61f1af6e8
parent65b655b53ec1cb91fda0d34e5176f8cdcfcf2e3d
Fix handling of extended statistics during ALTER COLUMN TYPE.

ALTER COLUMN TYPE on a column used by a statistics object fails since
commit 928c4de30, because the relevant switch in ATExecAlterColumnType
is unprepared for columns to have dependencies from OCLASS_STATISTIC_EXT
objects.

Although the existing types of extended statistics don't actually need us
to do any work for a column type change, it seems completely indefensible
that that assumption is hidden behind the failure of an unrelated module
to contain any code for the case.  Hence, create and call an API function
in statscmds.c where the assumption can be explained, and where we could
add code to deal with the problem when it inevitably becomes real.

Also, the reason this wasn't handled before, neither for extended stats
nor for the last half-dozen new OCLASS kinds :-(, is that the default:
in that switch suppresses compiler warnings, allowing people to miss the
need to consider it when adding an OCLASS.  We don't really need a default
because surely getObjectClass should only return valid values of the enum;
so remove it, and add the missed OCLASS entries where they should be.

Discussion: https://postgr.es/m/20170512221010.nglatgt5azzdxjlj@alvherre.pgsql
src/backend/commands/statscmds.c
src/backend/commands/tablecmds.c
src/include/commands/defrem.h
src/test/regress/expected/stats_ext.out
src/test/regress/sql/stats_ext.sql