postgresql/src/backend/access
Alvaro Herrera 515e3d84a0
Avoid creating archive status ".ready" files too early
WAL records may span multiple segments, but XLogWrite() does not
wait for the entire record to be written out to disk before
creating archive status files.  Instead, as soon as the last WAL page of
the segment is written, the archive status file is created, and the
archiver may process it.  If PostgreSQL crashes before it is able to
write and flush the rest of the record (in the next WAL segment), the
wrong version of the first segment file lingers in the archive, which
causes operations such as point-in-time restores to fail.

To fix this, keep track of records that span across segments and ensure
that segments are only marked ready-for-archival once such records have
been completely written to disk.

This has always been wrong, so backpatch all the way back.

Author: Nathan Bossart <bossartn@amazon.com>
Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Reviewed-by: Ryo Matsumura <matsumura.ryo@fujitsu.com>
Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>
Discussion: https://postgr.es/m/CBDDFA01-6E40-46BB-9F98-9340F4379505@amazon.com
2021-08-23 15:50:35 -04:00
..
brin Fix an asssortment of typos in brin_minmax_multi.c and mcv.c 2021-06-10 20:13:44 +12:00
common Revert analyze support for partitioned tables 2021-08-16 17:27:52 -04:00
gin Remove redundant memset(0) calls for page init of some index AMs 2021-04-07 14:35:26 +09:00
gist Replace RelationOpenSmgr() with RelationGetSmgr(). 2021-07-12 17:01:36 -04:00
hash Fix grammar mistake in hash index README 2021-08-12 08:53:41 -04:00
heap Emit namespace in the post-copy errmsg 2021-08-16 20:06:54 +02:00
index Initial pgindent and pgperltidy run for v14. 2021-05-12 13:14:10 -04:00
nbtree Replace RelationOpenSmgr() with RelationGetSmgr(). 2021-07-12 17:01:36 -04:00
rmgrdesc Improve WAL record descriptions for SP-GiST records. 2021-04-20 17:01:49 -04:00
spgist Remove some unnecessary casts in format arguments 2021-08-08 22:08:07 +02:00
table Replace RelationOpenSmgr() with RelationGetSmgr(). 2021-07-12 17:01:36 -04:00
tablesample Update copyright for 2021 2021-01-02 13:06:25 -05:00
transam Avoid creating archive status ".ready" files too early 2021-08-23 15:50:35 -04:00
Makefile Introduce access/{table.h, relation.h}, for generic functions from heapam.h. 2019-01-21 10:51:36 -08:00