pgsql: Fix handling of expressions and predicates in REINDEXCONCURRENT

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема pgsql: Fix handling of expressions and predicates in REINDEXCONCURRENT
Дата
Msg-id E1hru9R-0004Ky-J3@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix handling of expressions and predicates in REINDEX CONCURRENTLY

When copying the definition of an index rebuilt concurrently for the new
entry, the index information was taken directly from the old index using
the relation cache.  In this case, predicates and expressions have
some post-processing to prepare things for the planner, which loses some
information including the collations added in any of them.

This inconsistency can cause issues when attempting for example a table
rewrite, and makes the new indexes rebuilt concurrently inconsistent
with the old entries.

In order to fix the problem, fetch expressions and predicates directly
from the catalog of the old entry, and fill in IndexInfo for the new
index with that.  This makes the process more consistent with
DefineIndex(), and the code is refactored with the addition of a routine
to create an IndexInfo node.

Reported-by: Manuel Rigger
Author: Michael Paquier
Discussion: https://postgr.es/m/CA+u7OA5Hp0ra235F3czPom_FyAd-3+XwSJmX95r1+sRPOJc9VQ@mail.gmail.com
Backpatch-through: 12

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/28bbf7a81b3a30504cc7dfdbd76b410d1f127b8e

Modified Files
--------------
src/backend/catalog/index.c                | 74 +++++++++++++++++++++++++++---
src/backend/commands/indexcmds.c           | 46 ++++++-------------
src/backend/nodes/makefuncs.c              | 52 ++++++++++++++++++++-
src/include/nodes/makefuncs.h              |  7 ++-
src/test/regress/expected/create_index.out | 72 +++++++++++++++++++++++++++++
src/test/regress/sql/create_index.sql      | 28 +++++++++++
6 files changed, 237 insertions(+), 42 deletions(-)


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

Предыдущее
От: Thomas Munro
Дата:
Сообщение: pgsql: Avoid macro clash with LLVM 9.
Следующее
От: Michael Paquier
Дата:
Сообщение: pgsql: Fix inconsistencies and typos in the tree