Re: Issues with ON CONFLICT UPDATE and REINDEX CONCURRENTLY
Álvaro Herrera <alvherre@kurilemu.de>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Replace flaky CIC/RI isolation tests with a TAP test
- e1c971945d62 19 (unreleased) landed
-
Disable recently added CIC/RI isolation tests
- 77038d6d0b49 19 (unreleased) landed
-
Fix infer_arbiter_index for partitioned tables
- 81f72115cf18 19 (unreleased) landed
-
Stabilize tests some more
- a4a0fa0c7587 19 (unreleased) landed
-
Put back alternative-output expected files
- be25c7767728 19 (unreleased) landed
-
Remove doc and code comments about ON CONFLICT deficiencies
- 758479213d57 19 (unreleased) landed
-
Avoid use of NOTICE to wait for snapshot invalidation
- 5dee7a603f66 19 (unreleased) landed
-
Fix ON CONFLICT with REINDEX CONCURRENTLY and partitions
- 90eae926abbb 19 (unreleased) landed
-
Fix ON CONFLICT ON CONSTRAINT during REINDEX CONCURRENTLY
- 2bc7e886fc1b 19 (unreleased) landed
-
Fix new test for CATCACHE_FORCE_RELEASE builds
- 9e8fa05d3412 19 (unreleased) landed
-
Improve test case stability
- 417ac9c1eeeb 19 (unreleased) landed
-
Fix infer_arbiter_index during concurrent index operations
- bc32a12e0db2 19 (unreleased) landed
-
Doc: cover index CONCURRENTLY causing errors in INSERT ... ON CONFLICT.
- 438ccd33a37a 13.23 landed
- faba2595d619 14.20 landed
- e1dd1f924e19 15.15 landed
- 4c2895629f6f 16.11 landed
- 46524d519a2d 18.1 landed
- 27f714b5dad7 17.7 landed
- 8b18ed6dfbb8 19 (unreleased) landed
-
Fix infer_arbiter_indexes() to not assume resultRelation is 1.
- 915de706d28c 17.0 cited
-
Revert temporal primary keys and foreign keys
- 8aee330af55d 17.0 cited
On 2025-Dec-06, Mihail Nikalayeu wrote: > Such commands add an indisready, but not indisvalid index on pt, which > is added to to the list of potential arbiters. > It happens because of [0]. > > From my perspective, the correct solution - is to just remove the > error message, because it looks obsolete now. Or somehow calculate > compensation offset differently - but I am not sure it is a good idea. Hmm, as I recall it's quite intentional that the index on a partitioned table is marked !indisvalid; such indexes are only supposed to be marked valid once indexes on all partitions have been attached. As I recall, if you remove that prohibition, some pg_dump scenarios fail. I'd rather consider the idea of avoiding indexes marked !indisvalid on partitioned tables as arbiter lists ... but then we need to verify the scenario where there is one, and INSERT ON CONFLICT runs concurrently with ALTER INDEX ATTACH PARTITION for the last partition lacking the index (which is the point where the index is marked indisvalid on the partitioned table). There may not be a problem with that, because we grab AccessExclusiveLock on the index partition, so no query can be running concurrently ... unless the INSERT is targeting a partition other than the one where the index is being attached. (On the partitioned table and index, we only have ShareUpdateExclusiveLock). -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "Crear es tan difícil como ser libre" (Elsa Triolet)