postgres.git / summary / log / commit / refs

commit    5864d246099f1619539f20ae53331fbdb772b879
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Mar 18 00:12:24 2019 +0000
First released in: 11.3

    Error out in pg_verify_checksums on incompatible block size
    
    pg_verify_checksums is compiled with a given block size and has a hard
    dependency to it per the way checksums are calculated via
    checksum_impl.h, and trying to use the tool on a data folder which has
    not the same block size would result in incorrect checksum calculations
    and/or block read errors, meaning that the data folder is corrupted.
    This is harmless as checksums are only checked now, but very confusing
    for the user so issue an error properly if the block size used at
    compilation and the block size used in the data folder do not match.
    
    Reported-by: Sergei Kornilov
    Author: Michael Banck, Michael Paquier
    Reviewed-by: Fabien Coelho, Magnus Hagander
    Discussion: https://postgr.es/m/20190317054657.GA3357@paquier.xyz
    ackpatch-through: 11


src/bin/pg_verify_checksums/pg_verify_checksums.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bin/pg_verify_checksums/pg_verify_checksums.c b/src/bin/pg_verify_checksums/pg_verify_checksums.c index a992886a323..3ab0170977b 100644 --- a/src/bin/pg_verify_checksums/pg_verify_checksums.c +++ b/src/bin/pg_verify_checksums/pg_verify_checksums.c @@ -323,6 +323,15 @@ main(int argc, char *argv[]) exit(1); } + if (ControlFile->blcksz != BLCKSZ) + { + fprintf(stderr, _("%s: database cluster is not compatible.\n"), + progname); + fprintf(stderr, _("The database cluster was initialized with block size %u, but pg_checksums was compiled with block size %u.\n"), + ControlFile->blcksz, BLCKSZ); + exit(1); + } + if (ControlFile->state != DB_SHUTDOWNED && ControlFile->state != DB_SHUTDOWNED_IN_RECOVERY) { [parent: a1e9508b9641]