remains unchanged, and <application>pg_checksums</application> can be
    re-run to perform the same operation.
   </para>
+  <para>
+   The target cluster must have the same major version as
+   <application>pg_checksums</application>.
+  </para>
  </refsect1>
 </refentry>
 
 #include "common/logging.h"
 #include "common/relpath.h"
 #include "fe_utils/option_utils.h"
+#include "fe_utils/version.h"
 #include "getopt_long.h"
 #include "pg_getopt.h"
 #include "storage/bufpage.h"
    int         c;
    int         option_index;
    bool        crc_ok;
+   uint32      major_version;
+   char       *version_str;
 
    pg_logging_init(argv[0]);
    set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_checksums"));
        exit(1);
    }
 
+   /*
+    * Retrieve the contents of this cluster's PG_VERSION.  We require
+    * compatibility with the same major version as the one this tool is
+    * compiled with.
+    */
+   major_version = GET_PG_MAJORVERSION_NUM(get_pg_version(DataDir, &version_str));
+   if (major_version != PG_MAJORVERSION_NUM)
+   {
+       pg_log_error("data directory is of wrong version");
+       pg_log_error_detail("File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\".",
+                           "PG_VERSION", version_str, PG_MAJORVERSION);
+       exit(1);
+   }
+
    /* Read the control file and check compatibility */
    ControlFile = get_controlfile(DataDir, &crc_ok);
    if (!crc_ok)