summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2025-10-15 10:09:48 +0900
committerMichael Paquier <michael@paquier.xyz>2025-10-15 10:09:48 +0900
commitc6a6cd53d3ababa667aa224229550b96fb13cf26 (patch)
tree09177433daef7a39d39269751f04c9a65ead6773
parente4775e42cadeaa918bf5e10bf17056c51d5e16e2 (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.c30
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);
}