Alvaro Herrera <alvhe...@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 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers