From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix subtly-incorrect matching of parent and child partitioned in |
Date: | 2022-08-18 16:12:20 |
Message-ID: | E1oOi83-0008Ln-Pr@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix subtly-incorrect matching of parent and child partitioned indexes.
When creating a partitioned index, DefineIndex tries to identify
any existing indexes on the partitions that match the partitioned
index, so that it can absorb those as child indexes instead of
building new ones. Part of the matching is to compare IndexInfo
structs --- but that wasn't done quite right. We're comparing
the IndexInfo built within DefineIndex itself to one made from
existing catalog contents by BuildIndexInfo. Notably, while
BuildIndexInfo will run index expressions and predicates through
expression preprocessing, that has not happened to DefineIndex's
struct. The result is failure to match and subsequent creation
of duplicate indexes.
The easiest and most bulletproof fix is to build a new IndexInfo
using BuildIndexInfo, thereby guaranteeing that the processing done
is identical.
While here, let's also extract the opfamily and collation data
from the new partitioned index, removing ad-hoc logic that
duplicated knowledge about how those are constructed.
Per report from Christophe Pettus. Back-patch to v11 where
we invented partitioned indexes.
Richard Guo and Tom Lane
Discussion: https://postgr.es/m/8864BFAA-81FD-4BF9-8E06-7DEB8D4164ED@thebuild.com
Branch
------
REL_11_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/116f20f926564cd4645f8d2f49fd0dfd0ad1f897
Modified Files
--------------
src/backend/commands/indexcmds.c | 23 ++++++++----
src/test/regress/expected/indexing.out | 66 +++++++++++++++++++++++++++++++++-
src/test/regress/sql/indexing.sql | 15 +++++++-
3 files changed, 96 insertions(+), 8 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2022-08-18 16:26:18 | pgsql: Adjust assertion in XLogDecodeNextRecord. |
Previous Message | Robert Haas | 2022-08-18 15:33:40 | pgsql: When using the WAL-logged CREATE DATABASE strategy, bulk extend. |