pgsql: Fix duplicate arbiter detection during REINDEX CONCURRENTLY on p

From: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix duplicate arbiter detection during REINDEX CONCURRENTLY on p
Date: 2026-01-28 14:23:30
Message-ID: E1vl6S9-003BbG-3D@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix duplicate arbiter detection during REINDEX CONCURRENTLY on partitions

Commit 90eae926a fixed ON CONFLICT handling during REINDEX CONCURRENTLY
on partitioned tables by treating unparented indexes as potential
arbiters. However, there's a remaining race condition: when pg_inherits
records are swapped between consecutive calls to get_partition_ancestors(),
two different child indexes can appear to have the same parent, causing
duplicate entries in the arbiter list and triggering "invalid arbiter
index list" errors.

Note that this is not a new problem introduced by 90eae926a. The same
error could occur before that commit in a slightly different scenario:
an index is selected during planning, then index_concurrently_swap()
commits, and a subsequent call to get_partition_ancestors() uses a new
catalog snapshot that sees zero ancestors for that index.

Fix by tracking which parent indexes have already been processed. If a
subsequent call to get_partition_ancestors() returns a parent we've
already seen, treat that index as unparented instead, allowing it to be
matched via IsIndexCompatibleAsArbiter() like other concurrent reindex
scenarios.

Author: Mihail Nikalayeu <mihailnikalayeu(at)gmail(dot)com>
Reported-by: Alexander Lakhin <exclusion(at)gmail(dot)com>
Reviewed-by: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
Discussion: https://postgr.es/m/e5a8c1df-04e5-4343-85ef-5df2a7e3d90c@gmail.com

Branch
------
master

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

Modified Files
--------------
src/backend/executor/execPartition.c | 35 +++++++++++++----
.../test_misc/t/010_index_concurrently_upsert.pl | 45 ++++++++++++++++++++++
2 files changed, 72 insertions(+), 8 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Amit Kapila 2026-01-28 15:00:45 Re: pgsql: Prevent invalidation of newly synced replication slots.
Previous Message Robert Haas 2026-01-28 12:57:49 Re: pgsql: Prevent invalidation of newly synced replication slots.