diff options
author | Magnus Hagander <magnus@hagander.net> | 2018-04-15 14:05:56 +0200 |
---|---|---|
committer | Magnus Hagander <magnus@hagander.net> | 2018-04-15 14:05:56 +0200 |
commit | 33cedf1474a356fe510d4ad32c040c968ef27307 (patch) | |
tree | 9c74c9bfaf702289df4b393d1dd4a5b909665e90 /src | |
parent | 90372729f4671ad5ad743b53a53e7ccbab92c4f8 (diff) | |
download | postgresql-33cedf1474a356fe510d4ad32c040c968ef27307.tar.gz postgresql-33cedf1474a356fe510d4ad32c040c968ef27307.zip |
Don't attempt to verify checksums on new pages
Teach both base backups and pg_verify_checksums that if a page is new,
it does not have a checksum yet, so it shouldn't be verified.
Noted by Tomas Vondra, review by David Steele.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/replication/basebackup.c | 4 | ||||
-rw-r--r-- | src/bin/pg_verify_checksums/pg_verify_checksums.c | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 50c052e9935..a79048d233d 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1446,8 +1446,10 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf * written only halfway and the checksum would not be valid. * However, replaying WAL would reinstate the correct page in * this case. + * We also skip completely new pages, since they don't have + * a checksum yet. */ - if (PageGetLSN(page) < startptr) + if (!PageIsNew(page) && PageGetLSN(page) < startptr) { checksum = pg_checksum_page((char *) page, blkno + segmentno * RELSEG_SIZE); phdr = (PageHeader) page; diff --git a/src/bin/pg_verify_checksums/pg_verify_checksums.c b/src/bin/pg_verify_checksums/pg_verify_checksums.c index d472f1291c5..b065d0bb897 100644 --- a/src/bin/pg_verify_checksums/pg_verify_checksums.c +++ b/src/bin/pg_verify_checksums/pg_verify_checksums.c @@ -106,6 +106,10 @@ scan_file(char *fn, int segmentno) } blocks++; + /* New pages have no checksum yet */ + if (PageIsNew(buf)) + continue; + csum = pg_checksum_page(buf, blockno + segmentno * RELSEG_SIZE); if (csum != header->pd_checksum) { |