Re: BRIN autosummarization lacking a snapshot
Álvaro Herrera <alvherre@kurilemu.de>
From: Álvaro Herrera <alvherre@kurilemu.de>
To: Michael Paquier <michael@paquier.xyz>
Cc: Pg Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-11-04T11:47:47Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix snapshot handling bug in recent BRIN fix
- ef81697fee77 13.23 landed
- bcfbd3f747d7 15.15 landed
- 8733f0b54c05 18.1 landed
- 65b0d1f74098 14.20 landed
- 3b5007347b5d 17.7 landed
- 20442cf5075d 16.11 landed
- 0a3d27bfe0fb 19 (unreleased) landed
-
BRIN autosummarization may need a snapshot
- f4b68b0336bd 17.7 landed
- f0ad41716197 14.20 landed
- a95e3d84c0e0 19 (unreleased) landed
- 6ef33c8051dd 16.11 landed
- 419ffde23546 18.1 landed
- 3c7b47974ec7 13.23 landed
- 23ddadf6835e 15.15 landed
Attachments
- v2-0001-BRIN-autosummarization-may-need-a-snapshot.patch (text/x-diff)
On 2025-Nov-04, Michael Paquier wrote: > Spawning an autovacuum worker can feel artistic as we try to make the > tests run fast, but it's not that bad. The trick is to use an > "autovacuum_naptime = 1". Then you could either scan the server logs > for some 'autovacuum: processing database "blah"', or just a polling > query based on pg_stat_all_tables.autovacuum_count. See for example > 006_signal_autovacuum.pl. Ah yes ... and, actually, we already have a file doing a closely related thing, so I added to it. Here's the patch for master. Backbranches are essentially identical, modulo these changes for 13 and 14: -use Test::More tests => 2; +use Test::More tests => 4; I'm glad we got rid of that :-) With my initial try of this test, just counting the number of BRIN tuples, I was _really_ surprised that the index did indeed contain the expected number of tuples, even when the error was being thrown. This turned out to be expected, because the way BRIN summarization works is that we insert a placeholder tuple first, then update it to the correct value, and the error only aborts the second part. That's why I needed to add a WHERE clause to only count non-placeholder tuples. I also added a 'sleep(1)', to avoid looping on the query when we know autovacuum can't possibly have had a chance to run yet. I unleashed CI on branches 15 and master, and will push soon if they both turn green. -- Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/ "La virtud es el justo medio entre dos defectos" (Aristóteles)