From: | Michael Paquier <michael(at)paquier(dot)xyz> |
---|---|
To: | Shruthi Gowda <gowdashru(at)gmail(dot)com> |
Cc: | PostgreSQL Development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: 'ERROR: attempted to update invisible tuple' from 'ALTER INDEX ... ATTACH PARTITION' on parent index |
Date: | 2023-07-12 05:42:33 |
Message-ID: | ZK49SZiIE/1mmEZ+@paquier.xyz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Jul 12, 2023 at 09:38:41AM +0900, Michael Paquier wrote:
> While working recently on what has led to cfc43ae and fc55c7f, I
> really got the feeling that there could be some command sequences that
> lacked some CCIs (or CommandCounterIncrement calls) to make sure that
> the catalog updates are visible in any follow-up steps in the same
> transaction.
Wait a minute. The validation of a partitioned index uses a copy of
the pg_index tuple from the relcache, which be out of date:
newtup = heap_copytuple(partedIdx->rd_indextuple);
((Form_pg_index) GETSTRUCT(newtup))->indisvalid = true;
And it seems to me that we should do the catalog update based on a
copy of a tuple coming from the syscache, no? Attached is a patch
that fixes your issue with more advanced regression tests that use two
levels of partitioning, looping twice through an update of indisvalid
when attaching the leaf index (the test reproduces the problem on
HEAD, as well).
--
Michael
Attachment | Content-Type | Size |
---|---|---|
0001-Fix-validation-update-of-partitioned-indexes.patch | text/x-diff | 7.8 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Justin Pryzby | 2023-07-12 05:56:17 | Re: CI and test improvements |
Previous Message | Thomas Munro | 2023-07-12 05:27:49 | Re: Cleaning up threading code |