mirror of
https://github.com/postgres/postgres.git
synced 2025-10-16 17:07:43 +03:00
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
cd0be131ba
. 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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user