Re: BUG #18146: Rows reappearing in Tables after Auto-Vacuum Failure in PostgreSQL on Windows
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, Alexander Lakhin <exclusion@gmail.com>, Robert Haas <robertmhaas@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Laurenz Albe <laurenz.albe@cybertec.at>, rootcause000@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2024-09-09T07:21:19Z
Lists: pgsql-bugs
On Fri, Sep 06, 2024 at 11:05:26AM +1200, Thomas Munro wrote: > But let's not forget that these patches also fix two bugs that apply > to Unix too. > > For the DELAY_CHKPT_START bug, we should back-patch all the way. > > For the WaitIO() bug affecting all OSes, that only needs to go back to > 14. We could also opt to be cautious and let it run on master for a > while before we do that, though. > > For ftruncate() failure, I wouldn't be too bothered if we just let > sleeping dogs lie in 13. It affects only systems that have serious > file system corruption, or Windows systems that have something > snooping on private files with antisocial flags. 0001 looks OK seen from here. +GetRelationPathInPlace(char *path, + Oid dbOid, Oid spcOid, RelFileNumber relNumber, It's very easy to handle such APIs the wrong way. I'd suggest to also give the size of the output buffer as an argument of the function, cross-checking in the function that nothing is wrong with the path generated. The trick to use _mdfd_segpath() through smgrpreparetruncate() smells too much of magic to me. I don't have an idea that does not involve tweaking the interface of smgr.c or some of its structures on top of my mind, though, which is to save the path before the critical section and pass it through (like a private memory area that can be used by md.c).. Or do a MemoryContextAllowInCriticalSection, even if it is not its original purpose. Also, now that we have injection points, could this stuff be worth adding a test? You could force an error state that gets upgraded to a PANIC while doing the truncation, checking that we don't lose data after recovery, for example. This is a problem old enough that I'd rather see some automation in place with a long-term picture in mind, even if it means a test for 17~ or just HEAD. -- Michael
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix C error reported by Oracle compiler.
- 417d41c658b3 13.19 landed
- 049c8cb9a239 14.16 landed
- 190054e61f5d 15.11 landed
- 9defaaa1da60 16.7 landed
- 45aef9f6bb0f 17.3 landed
-
Restore smgrtruncate() prototype in back-branches.
- a1d17a894731 13.19 landed
- f154f028d856 14.16 landed
- 3181befdca71 15.11 landed
- c957d7444fcc 16.7 landed
- 66aaabe7a18f 17.3 landed
-
Fix corruption when relation truncation fails.
- 2280912165d6 13.19 landed
- 23c743b645a5 14.16 landed
- fb540b6aa5ab 15.11 landed
- ba02d24bacbb 16.7 landed
- 0350b876b074 17.3 landed
- 38c579b08988 18.0 landed
-
RelationTruncate() must set DELAY_CHKPT_START.
- a501fe5a971e 15.11 landed
- ad5aa7bfd042 16.7 landed
- d4ffbf47b2d4 17.3 landed
- 1168acbca475 13.19 landed
- 7d0b91a28421 14.16 landed
- 75818b3afbf8 18.0 landed
-
WAL-log inplace update before revealing it to other sessions.
- 8e7e672cdaa6 18.0 cited
-
Fix bugs in MultiXact truncation
- b1ffe3ff0b7e 17.0 cited
-
Fix possible recovery trouble if TRUNCATE overlaps a checkpoint.
- 412ad7a55639 15.0 cited