From: | Michail Nikolaev <michail(dot)nikolaev(at)gmail(dot)com> |
---|---|
To: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | bt_index_parent_check and concurrently build indexes |
Date: | 2024-12-09 20:51:24 |
Message-ID: | CANtu0ojmVd27fEhfpST7RG2KZvwkX=dMyKUqg0KM87FkOSdz8Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hello, everyone!
While working on [0], I encountered an issue involving a missing tuple in
an index that was built concurrently. The problem only occurred once, but
it caused me a significant amount of frustration. :)
After some time, I managed to find a way to reproduce the issue. It turns
out that bt_index_parent_check is not suitable for validating indexes built
concurrently. The reason is that bt_index_parent_check uses SnapshotAny
during the heap scan, whereas an MVCC snapshot is used for the index build.
I’ve attached a patch that reproduces the issue (it incorrectly reports the
index as invalid, even though it is actually valid).
I’m unsure of the best way to address this issue, but here are some
possible options:
* Simply update the documentation.
* Issue a WARNING if !tupleIsAlive.
* Modify bt_index_parent_check to use an MVCC snapshot for the heap scan
Best regards,
Mikhail.
Attachment | Content-Type | Size |
---|---|---|
v1-0001-test-to-reproduce-issue-with-bt_index_parent_chec.patch | application/x-patch | 3.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Michail Nikolaev | 2024-12-09 20:53:00 | Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements |
Previous Message | Masahiko Sawada | 2024-12-09 20:46:35 | Re: Memory leak in WAL sender with pgoutput (v10~) |