On 01/09/2017 06:47 AM, Tom DalPozzo wrote:
https://www.postgresql.org/docs/9.5/static/wal-internals.html <https://www.postgresql.org/docs/9.5/static/wal-internals.html> "After a checkpoint has been made and the log flushed, the checkpoint's position is saved in the file pg_control. Therefore, at the start of recovery, the server first reads pg_control and then the checkpoint record; then it performs the REDO operation by scanning forward from the log position indicated in the checkpoint record. Because the entire content of data pages is saved in the log on the first page modification after a checkpoint (assuming full_page_writes is not disabled), all pages changed since the checkpoint will be restored to a consistent state." Hi, yes I know that, it's what I meant in my point 3). As it says first "the checkpoint's position (NOT the record)is saved in the file pg_control" then I had some doubt.
Reread your original post and realized you where also asking about transaction consistency and WALs. The thumbnail version is that Postgres writes transactions to the WALs before they are written to the data files on disk. A checkpoint represents a point in the sequence when is is known that the changes recorded in the WAL have been also recorded in the disk data files. So Postgres then knows that in a recovery scenario it needs to only redo/replay the WAL changes that are past the last checkpoint. So the transactions are there it is just a matter of if they need to be replayed or not. This is subject to caveats:
https://www.postgresql.org/docs/9.5/static/wal-reliability.html
Regards Pupillo
-- Adrian Klaver adrian.klaver@xxxxxxxxxxx -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general