Hi, > I use async commits. At some moment, I would like to make sure that all > inserted WAL records are fsync-ed. I can use XLogFlush function but I have > some doubts which LSN to specify. There is a number of functions which return > write or insert LSNs but they are not applicable. > > I can't use GetXLogInsertRecPtr() because it returns a real insert LSN, not > the end LSN of the last record. XLogFlush may fail with such LSN because the > specified LSN may be "in the future" if the WAL record ends up to the page > boundary (the real insert LSN is summed up with page header size). > > I can't use GetXLogWriteRecPtr() because it seems to be bounded to page > boundaries. Some inserted WAL records may not be fsync-ed. Some other > functions seems not applicable as well. > > The first idea is to use GetLastImportantRecPtr() but this function returns > the start LSN of the last important WAL record. I would use > XLogFlush(GetLastImportantRecPtr() + 1) but I'm not sure that this way is > conventional. > > Another idea is to create a new function like GetXLogInsertRecPtr() which > calls XLogBytePosToEndRecPtr() instead of XLogBytePosToRecPtr() inside it. > > Could you please advice which way to go?
Does pg_current_wal_flush_lsn() [1] return what you need? [1]: https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-RECOVERY-CONTROL -- Best regards, Aleksander Alekseev