Re: IPC/MultixactCreation on the Standby server
Andrey Borodin <x4mmm@yandex-team.ru>
From: Andrey Borodin <x4mmm@yandex-team.ru>
To: Álvaro Herrera <alvherre@kurilemu.de>
Cc: Dmitry <dsy.075@yandex.ru>,
pgsql-hackers@lists.postgresql.org
Date: 2025-07-25T18:33:39Z
Lists: pgsql-hackers
> On 21 Jul 2025, at 19:58, Andrey Borodin <x4mmm@yandex-team.ru> wrote: > > I'm planning to prepare tests and fixes for all supported branches This is a status update message. I've reproduced problem on REL_13_STABLE and verified that proposed fix works there. Also I've discovered one more serious problem. If a backend crashes just before WAL-logging multi, any heap tuple that uses this multi will become unreadable. Any attempt to read it will hang forever. I've reproduced the problem and now I'm working on scripting this scenario. Basically, I modify code to hang forever after assigning multi number 2. Then execute in first psql: create table x as select i,0 v from generate_series(1,10) i; create unique index on x(i); \set id 1 begin; select * from x where i = :id for no key update; savepoint s1; update x set v = v+1 where i = :id; -- multi 1 commit; \set id 2 begin; select * from x where i = :id for no key update; savepoint s1; update x set v = v+1 where i = :id; -- multi 2 -- will hang commit; Then in second psql: create table y as select i,0 v from generate_series(1,10) i; create unique index on y(i); \set id 1 begin; select * from y where i = :id for no key update; savepoint s1; update y set v = v+1 where i = :id; commit; After this I pkill -9 postgres. Recovered installation cannot execute select * from x; because multi 1 cannot be read without recovery of multi 2 which was never logged. Luckily fix is the same: just restore offset of multi 2 when multi 1 is recovered. Best regards, Andrey Borodin.
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix test to work with non-8kB block sizes
- 7c2061bdfba7 19 (unreleased) landed
-
Fix setting next multixid's offset at offset wraparound
- 48969555447f 14.21 landed
- b9a02b9780bc 15.16 landed
- 4d689a17693e 16.12 landed
- cad40cec24f3 17.8 landed
- 02ba5e3be4f3 18.2 landed
- 4d936c3fff1a 19 (unreleased) landed
-
Add test for multixid wraparound
- 7b81be9b4267 19 (unreleased) landed
-
Set next multixid's offset when creating a new multixid
- 81416e1016dd 14.21 landed
- 8cfb174a61eb 15.16 landed
- 635166913078 16.12 landed
- 8ba61bc06386 17.8 landed
- e46041fd973c 18.2 landed
- 789d65364cde 19 (unreleased) landed
-
psql: Improve tab completion for large objects.
- 14ee8e640300 19 (unreleased) cited
-
Refactor some repetitive SLRU code
- c61678551699 19 (unreleased) cited
-
Transaction IDs wrap around, per my proposal of 13-Aug-01. More
- bc7d37a525c0 7.2.1 cited