Hi, I was recently asked about converting an offset reported in WAL read error messages[1] to an LSN with which pg_waldump can be used to verify the records or WAL file around that LSN (basically one can filter out the output based on LSN). AFAICS, there's no function that takes offset as an input and produces an LSN and I ended up figuring out LSN manually. And, for some of my work too, I was hitting errors in XLogReaderValidatePageHeader() and adding recptr to those error messages helped me debug issues faster.
We have a bunch of messages [1] that have an offset, but not LSN in the error message. Firstly, is there an easiest way to figure out LSN from offset reported in the error messages? If not, is adding LSN to these messages along with offset a good idea? Of course, we can't just convert offset to LSN using XLogSegNoOffsetToRecPtr() and report, but something meaningful like reporting the LSN of the page that we are reading-in or writing-out etc. Thoughts? [1] errmsg("could not read from WAL segment %s, offset %u: %m", errmsg("could not read from WAL segment %s, offset %u: %m", errmsg("could not write to log file %s " "at offset %u, length %zu: %m", errmsg("unexpected timeline ID %u in WAL segment %s, offset %u", errmsg("could not read from WAL segment %s, offset %u: read %d of %zu", pg_log_error("received write-ahead log record for offset %u with no file open", "invalid magic number %04X in WAL segment %s, offset %u", "invalid info bits %04X in WAL segment %s, offset %u", "invalid info bits %04X in WAL segment %s, offset %u", "unexpected pageaddr %X/%X in WAL segment %s, offset %u", "out-of-sequence timeline ID %u (after %u) in WAL segment %s, offset %u", -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com