aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2023-03-07 18:21:37 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2023-03-07 18:21:53 -0500
commit76d2177fb693f8d35ee87a42d7801f4965ff3ad4 (patch)
treecd66b0d8d13f744952ed436913d2678b6664e6d0 /src/backend/executor
parentae4860183213518c2578d0fabb365ac3a8214f45 (diff)
downloadpostgresql-76d2177fb693f8d35ee87a42d7801f4965ff3ad4.tar.gz
postgresql-76d2177fb693f8d35ee87a42d7801f4965ff3ad4.zip
Fix more bugs caused by adding columns to the end of a view.
If a view is defined atop another view, and then CREATE OR REPLACE VIEW is used to add columns to the lower view, then when the upper view's referencing RTE is expanded by ApplyRetrieveRule we will have a subquery RTE with fewer eref->colnames than output columns. This confuses various code that assumes those lists are always in sync, as they are in plain parser output. We have seen such problems before (cf commit d5b760ecb), and now I think the time has come to do what was speculated about in that commit: let's make ApplyRetrieveRule synthesize some column names to preserve the invariant that holds in parser output. Otherwise we'll be chasing this class of bugs indefinitely. Moreover, it appears from testing that this actually gives us better results in the test case d5b760ecb added, and likely in other corner cases that we lack coverage for. In HEAD, I replaced d5b760ecb's hack to make expandRTE exit early with an elog(ERROR) call, since the case is now presumably unreachable. But it seems like changing that in back branches would bring more risk than benefit, so there I just updated the comment. Per bug #17811 from Alexander Lakhin. Back-patch to all supported branches. Discussion: https://postgr.es/m/17811-d31686b78f0dffc9@postgresql.org
Diffstat (limited to 'src/backend/executor')
0 files changed, 0 insertions, 0 deletions