pgsql: Yet further fixes for multi-row VALUES lists for updatable views

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Yet further fixes for multi-row VALUES lists for updatable views
Дата
Msg-id E1oiNfz-001xlE-0w@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Yet further fixes for multi-row VALUES lists for updatable views.

DEFAULT markers appearing in an INSERT on an updatable view
could be mis-processed if they were in a multi-row VALUES clause.
This would lead to strange errors such as "cache lookup failed
for type NNNN", or in older branches even to crashes.

The cause is that commit 41531e42d tried to re-use rewriteValuesRTE()
to remove any SetToDefault nodes (that hadn't previously been replaced
by the view's own default values) appearing in "product" queries,
that is DO ALSO queries.  That's fundamentally wrong because the
DO ALSO queries might not even be INSERTs; and even if they are,
their targetlists don't necessarily match the view's column list,
so that almost all the logic in rewriteValuesRTE() is inapplicable.

What we want is a narrow focus on replacing any such nodes with NULL
constants.  (That is, in this context we are interpreting the defaults
as being strictly those of the view itself; and we already replaced
any that aren't NULL.)  We could add still more !force_nulls tests
to further lobotomize rewriteValuesRTE(); but it seems cleaner to
split out this case to a new function, restoring rewriteValuesRTE()
to the charter it had before.

Per bug #17633 from jiye_sw.  Patch by me, but thanks to
Richard Guo and Japin Li for initial investigation.
Back-patch to all supported branches, as the previous fix was.

Discussion: https://postgr.es/m/17633-98cc85e1fa91e905@postgresql.org

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/07ce6769824c4081208122ae3c1b38812e4715ed

Modified Files
--------------
src/backend/rewrite/rewriteHandler.c          | 87 ++++++++++++++++++---------
src/test/regress/expected/updatable_views.out | 22 +++++++
src/test/regress/sql/updatable_views.sql      | 17 ++++++
3 files changed, 98 insertions(+), 28 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: noreply@postgresql.org
Дата:
Сообщение: pgsql: Tag refs/tags/REL_15_0 was created
Следующее
От: Andres Freund
Дата:
Сообщение: Re: pgsql: Add support for COPY TO callback functions