Allow ALTER INDEX .. ATTACH PARTITION to validate a parent index This commit tweaks ALTER INDEX .. ATTACH PARTITION to attempt a validation of a parent index in the case where an index is already attached but the parent is not yet valid. This occurs in cases where a parent index was created invalid such as with CREATE INDEX ONLY, but was left invalid after an invalid child index was attached (partitioned indexes set indisvalid to false if at least one partition is !indisvalid, indisvalid is true in a partitioned table iff all partitions are indisvalid). This could leave a partition tree in a situation where a user could not bring the parent index back to valid after fixing the child index, as there is no built-in mechanism to do so. This commit relies on the fact that repeated ATTACH PARTITION commands on the same index silently succeed.
An invalid parent index is more than just a passive issue. It causes for example ON CONFLICT on a partitioned table if the invalid parent index is used to enforce a unique constraint. Some test cases are added to track some of problematic patterns, using a set of partition trees with combinations of invalid indexes and ATTACH PARTITION. Reported-by: Mohamed Ali <[email protected]> Author: Sami Imseih <[email protected]> Reviewed-by: Michael Paquier <[email protected]> Reviewed-by: Haibo Yan <[email protected]> Discussion: http://postgr.es/m/CAGnOmWqi1D9ycBgUeOGf6mOCd2Dcf=6skhbf4shls5xackv...@mail.gmail.com Backpatch-through: 14 Branch ------ REL_14_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/d809b16d1bd21ff708126ef111ddfee0fc477dbf Modified Files -------------- src/backend/commands/tablecmds.c | 13 +++- src/test/regress/expected/indexing.out | 105 +++++++++++++++++++++++++++++++++ src/test/regress/sql/indexing.sql | 59 ++++++++++++++++++ 3 files changed, 176 insertions(+), 1 deletion(-)
