Re: Re: PANIC: invalid index offnum: 186 when processing BRIN indexes in VACUUM
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Tomas Vondra <tomas.vondra@2ndquadrant.com>,
Michael Paquier <michael.paquier@gmail.com>,
PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2017-11-03T13:58:59Z
Lists: pgsql-hackers
Alvaro Herrera <alvherre@alvh.no-ip.org> writes: > Alvaro Herrera wrote: >> Maybe a solution is to call RelationGetNumberOfBlocks() after the >> placeholder tuple has been inserted, for the case where we would be >> scanning past end of relation; passing InvalidBlockNumber as stop point >> would indicate to do things that way. I'll try with that approach now. > Yeah, I think this approach results in better code. The attached patch > implements that, and it passes the test for me (incl. calling > brin_summarize_new_values concurrently with vacuum, when running the > insert; the former does include the final page range whereas the latter > does not.) Hm, so IIUC the point is that once the placeholder tuple is in, we can rely on concurrent inserters to update it for insertions into pages that are added after we determine our scan stop point. But if the scan stop point is chosen before inserting the placeholder, then we have a race condition. The given code seems a brick or so short of a load, though: if the table has been extended sufficiently, it could compute scanNumBlks as larger than bs_pagesPerRange, no? You need to clamp the computation result. Also, shouldn't the passed-in heapBlk always be a multiple of pagesPerRange already? Do we still need the complication in brinsummarize to discriminate against the last partial range? Now that the lock consideration is gone, I think that might be a wart. regards, tom lane
Commits
-
Fix BRIN summarization concurrent with extension
- ec42a1dcb30d 11.0 landed
- cf0612aa2c8f 9.5.10 landed
- bd8e2b3cf4cf 9.6.6 landed
- 37a856567c04 10.1 landed
-
Fix corner-case errors in brin_doupdate().
- 62a16572d571 11.0 landed
- a43cd427e703 9.6.6 landed
- 43276abc6f7e 9.5.10 landed
- 97ba7b8c87e1 10.1 landed
-
Rewrite PageIndexDeleteNoCompact into a form that only deletes 1 tuple.
- 24992c6db9fd 10.0 cited
-
Invent PageIndexTupleOverwrite, and teach BRIN and GiST to use it.
- b1328d78f88c 10.0 cited
-
Close some holes in BRIN page assignment
- ccc4c074994d 9.6.0 cited