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


Reply via email to