diff options
author | Michael Paquier <michael@paquier.xyz> | 2025-10-15 10:09:48 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2025-10-15 10:09:48 +0900 |
commit | c6a6cd53d3ababa667aa224229550b96fb13cf26 (patch) | |
tree | 09177433daef7a39d39269751f04c9a65ead6773 | |
parent | e4775e42cadeaa918bf5e10bf17056c51d5e16e2 (diff) |
pg_resetwal: Use new routine to retrieve data of PG_VERSION
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 <michael@paquier.xyz>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Discussion: https://postgr.es/m/aOiirvWJzwdVCXph@paquier.xyz
-rw-r--r-- | src/bin/pg_resetwal/pg_resetwal.c | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index 7a4e4eb9570..a89d72fc5cf 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -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); } |