Hi, On 2023-11-09 16:14:07 -0500, Bruce Momjian wrote: > On Thu, Nov 9, 2023 at 09:49:48PM +0100, Matthias van de Meent wrote: > > Either way, I think fix #1 is most correct (as was attached in > > offset2.diff, and quoted verbatim here), because that has no chance of > > having surprising underflowing behaviour when you use '0/0'::lsn as > > input. > > Attached is the full patch that changes pg_walfile_name_offset() and > pg_walfile_name(). There is no need for doc changes.
I think this needs to add tests "documenting" the changed behaviour and perhaps also for a few other edge cases. You could e.g. test SELECT * FROM pg_walfile_name_offset('0/0') which today returns bogus values, and which is independent of the wal segment size. And with SELECT setting::int8 AS segment_size FROM pg_settings WHERE name = 'wal_segment_size' \gset you can test real things too, e.g.: SELECT segment_number, file_offset FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size), pg_split_walfile_name(file_name); SELECT segment_number, file_offset FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size + 1), pg_split_walfile_name(file_name); SELECT segment_number, file_offset = :segment_size - 1 FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size - 1), pg_split_walfile_name(file_name); Greetings, Andres Freund