pgsql: Fix some corner-case issues in REFRESH MATERIALIZED VIEWCONCURR

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix some corner-case issues in REFRESH MATERIALIZED VIEWCONCURR
Дата
Msg-id E1ey3bp-0002PG-L1@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix some corner-case issues in REFRESH MATERIALIZED VIEW CONCURRENTLY.

refresh_by_match_merge() has some issues in the way it builds a SQL
query to construct the "diff" table:

1. It doesn't require the selected unique index(es) to be indimmediate.
2. It doesn't pay attention to the particular equality semantics enforced
by a given index, but just assumes that they must be those of the column
datatype's default btree opclass.
3. It doesn't check that the indexes are btrees.
4. It's insufficiently careful to ensure that the parser will pick the
intended operator when parsing the query.  (This would have been a
security bug before CVE-2018-1058.)
5. It's not careful about indexes on system columns.

The way to fix #4 is to make use of the existing code in ri_triggers.c
for generating an arbitrary binary operator clause.  I chose to move
that to ruleutils.c, since that seems a more reasonable place to be
exporting such functionality from than ri_triggers.c.

While #1, #3, and #5 are just latent given existing feature restrictions,
and #2 doesn't arise in the core system for lack of alternate opclasses
with different equality behaviors, #4 seems like an issue worth
back-patching.  That's the bulk of the change anyway, so just back-patch
the whole thing to 9.4 where this code was introduced.

Discussion: https://postgr.es/m/13836.1521413227@sss.pgh.pa.us

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/e17e9055f5644f1b39ecd1bf64ec03d3430dfb46

Modified Files
--------------
src/backend/commands/matview.c      | 182 +++++++++++++++++++++++-------------
src/backend/utils/adt/ri_triggers.c |  69 ++------------
src/backend/utils/adt/ruleutils.c   |  80 ++++++++++++++++
src/include/utils/builtins.h        |   4 +
4 files changed, 208 insertions(+), 127 deletions(-)


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

Предыдущее
От: Andrew Dunstan
Дата:
Сообщение: Re: pgsql: Add tests for reinit.c
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Add missing break