pg_resetwal: Use new routine to retrieve data of PG_VERSION
authorMichael Paquier <[email protected]>
Wed, 15 Oct 2025 01:09:48 +0000 (10:09 +0900)
committerMichael Paquier <[email protected]>
Wed, 15 Oct 2025 01:09:48 +0000 (10:09 +0900)
pg_resetwal's custom logic to retrieve the version number of a data
folder's PG_VERSION can be replaced by the facility introduced in
cd0be131ba6f.  This removes some code.

One thing specific to pg_resetwal is that the first line of PG_VERSION
is read and reported in the error report generated when the major
version read does not match with the version pg_resetwal has been
compiled with.  The new logic preserves this property, without changes
to neither the error message nor the data used in the error report.

Note that as a chdir() is done within the data folder before checking the
data of PG_VERSION, get_pg_version() needs to be tweaked to look for
PG_VERSION in the current folder.

Author: Michael Paquier <[email protected]>
Reviewed-by: Masahiko Sawada <[email protected]>
Discussion: https://postgr.es/m/[email protected]

src/bin/pg_resetwal/pg_resetwal.c

index 7a4e4eb95706e82931e89384f8902db4193467fd..a89d72fc5cfec45f6110b1bdf133bb4f00ed44f7 100644 (file)
@@ -55,6 +55,7 @@
 #include "common/restricted_token.h"
 #include "common/string.h"
 #include "fe_utils/option_utils.h"
+#include "fe_utils/version.h"
 #include "getopt_long.h"
 #include "pg_getopt.h"
 #include "storage/large_object.h"
@@ -539,35 +540,18 @@ main(int argc, char *argv[])
 static void
 CheckDataVersion(void)
 {
-   const char *ver_file = "PG_VERSION";
-   FILE       *ver_fd;
-   char        rawline[64];
+   char       *version_str;
+   uint32      version = get_pg_version(".", &version_str);
 
-   if ((ver_fd = fopen(ver_file, "r")) == NULL)
-       pg_fatal("could not open file \"%s\" for reading: %m",
-                ver_file);
-
-   /* version number has to be the first line read */
-   if (!fgets(rawline, sizeof(rawline), ver_fd))
-   {
-       if (!ferror(ver_fd))
-           pg_fatal("unexpected empty file \"%s\"", ver_file);
-       else
-           pg_fatal("could not read file \"%s\": %m", ver_file);
-   }
-
-   /* strip trailing newline and carriage return */
-   (void) pg_strip_crlf(rawline);
-
-   if (strcmp(rawline, PG_MAJORVERSION) != 0)
+   if (GET_PG_MAJORVERSION_NUM(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\".",
-                           ver_file, rawline, PG_MAJORVERSION);
+                           "PG_VERSION",
+                           version_str,
+                           PG_MAJORVERSION);
        exit(1);
    }
-
-   fclose(ver_fd);
 }