summaryrefslogtreecommitdiffstats
path: root/src/bin/pg_resetwal
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:19:15 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:19:15 +0000
commit6eb9c5a5657d1fe77b55cc261450f3538d35a94d (patch)
tree657d8194422a5daccecfd42d654b8a245ef7b4c8 /src/bin/pg_resetwal
parentInitial commit. (diff)
downloadpostgresql-13-upstream.tar.xz
postgresql-13-upstream.zip
Adding upstream version 13.4.upstream/13.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bin/pg_resetwal')
-rw-r--r--src/bin/pg_resetwal/.gitignore2
-rw-r--r--src/bin/pg_resetwal/Makefile44
-rw-r--r--src/bin/pg_resetwal/nls.mk6
-rw-r--r--src/bin/pg_resetwal/pg_resetwal.c1238
-rw-r--r--src/bin/pg_resetwal/po/cs.po721
-rw-r--r--src/bin/pg_resetwal/po/de.po662
-rw-r--r--src/bin/pg_resetwal/po/es.po663
-rw-r--r--src/bin/pg_resetwal/po/fr.po793
-rw-r--r--src/bin/pg_resetwal/po/ja.po740
-rw-r--r--src/bin/pg_resetwal/po/ko.po662
-rw-r--r--src/bin/pg_resetwal/po/pt_BR.po651
-rw-r--r--src/bin/pg_resetwal/po/ru.po761
-rw-r--r--src/bin/pg_resetwal/po/sv.po657
-rw-r--r--src/bin/pg_resetwal/po/tr.po751
-rw-r--r--src/bin/pg_resetwal/po/uk.po618
-rw-r--r--src/bin/pg_resetwal/po/zh_CN.po639
-rw-r--r--src/bin/pg_resetwal/t/001_basic.pl27
-rw-r--r--src/bin/pg_resetwal/t/002_corrupted.pl53
18 files changed, 9688 insertions, 0 deletions
diff --git a/src/bin/pg_resetwal/.gitignore b/src/bin/pg_resetwal/.gitignore
new file mode 100644
index 0000000..56bade5
--- /dev/null
+++ b/src/bin/pg_resetwal/.gitignore
@@ -0,0 +1,2 @@
+/pg_resetwal
+/tmp_check/
diff --git a/src/bin/pg_resetwal/Makefile b/src/bin/pg_resetwal/Makefile
new file mode 100644
index 0000000..464268e
--- /dev/null
+++ b/src/bin/pg_resetwal/Makefile
@@ -0,0 +1,44 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_resetwal
+#
+# Copyright (c) 1998-2020, PostgreSQL Global Development Group
+#
+# src/bin/pg_resetwal/Makefile
+#
+#-------------------------------------------------------------------------
+
+PGFILEDESC = "pg_resetwal - reset PostgreSQL WAL log"
+PGAPPICON=win32
+
+subdir = src/bin/pg_resetwal
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+OBJS = \
+ $(WIN32RES) \
+ pg_resetwal.o
+
+all: pg_resetwal
+
+pg_resetwal: $(OBJS) | submake-libpgport
+ $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+ $(INSTALL_PROGRAM) pg_resetwal$(X) '$(DESTDIR)$(bindir)/pg_resetwal$(X)'
+
+installdirs:
+ $(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+ rm -f '$(DESTDIR)$(bindir)/pg_resetwal$(X)'
+
+clean distclean maintainer-clean:
+ rm -f pg_resetwal$(X) $(OBJS)
+ rm -rf tmp_check
+
+check:
+ $(prove_check)
+
+installcheck:
+ $(prove_installcheck)
diff --git a/src/bin/pg_resetwal/nls.mk b/src/bin/pg_resetwal/nls.mk
new file mode 100644
index 0000000..5fb7c1e
--- /dev/null
+++ b/src/bin/pg_resetwal/nls.mk
@@ -0,0 +1,6 @@
+# src/bin/pg_resetwal/nls.mk
+CATALOG_NAME = pg_resetwal
+AVAIL_LANGUAGES = cs de es fr ja ko pt_BR ru sv tr uk zh_CN
+GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_resetwal.c ../../common/restricted_token.c
+GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS)
+GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS)
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
new file mode 100644
index 0000000..c8cbd11
--- /dev/null
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -0,0 +1,1238 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_resetwal.c
+ * A utility to "zero out" the xlog when it's corrupt beyond recovery.
+ * Can also rebuild pg_control if needed.
+ *
+ * The theory of operation is fairly simple:
+ * 1. Read the existing pg_control (which will include the last
+ * checkpoint record). If it is an old format then update to
+ * current format.
+ * 2. If pg_control is corrupt, attempt to intuit reasonable values,
+ * by scanning the old xlog if necessary.
+ * 3. Modify pg_control to reflect a "shutdown" state with a checkpoint
+ * record at the start of xlog.
+ * 4. Flush the existing xlog files and write a new segment with
+ * just a checkpoint record in it. The new segment is positioned
+ * just past the end of the old xlog, so that existing LSNs in
+ * data pages will appear to be "in the past".
+ * This is all pretty straightforward except for the intuition part of
+ * step 2 ...
+ *
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/pg_resetwal/pg_resetwal.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * We have to use postgres.h not postgres_fe.h here, because there's so much
+ * backend-only stuff in the XLOG include files we need. But we need a
+ * frontend-ish environment otherwise. Hence this ugly hack.
+ */
+#define FRONTEND 1
+
+#include "postgres.h"
+
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "access/heaptoast.h"
+#include "access/multixact.h"
+#include "access/transam.h"
+#include "access/xlog.h"
+#include "access/xlog_internal.h"
+#include "common/controldata_utils.h"
+#include "common/fe_memutils.h"
+#include "common/file_perm.h"
+#include "common/logging.h"
+#include "common/restricted_token.h"
+#include "common/string.h"
+#include "getopt_long.h"
+#include "pg_getopt.h"
+#include "storage/large_object.h"
+
+static ControlFileData ControlFile; /* pg_control values */
+static XLogSegNo newXlogSegNo; /* new XLOG segment # */
+static bool guessed = false; /* T if we had to guess at any values */
+static const char *progname;
+static uint32 set_xid_epoch = (uint32) -1;
+static TransactionId set_oldest_xid = 0;
+static TransactionId set_xid = 0;
+static TransactionId set_oldest_commit_ts_xid = 0;
+static TransactionId set_newest_commit_ts_xid = 0;
+static Oid set_oid = 0;
+static MultiXactId set_mxid = 0;
+static MultiXactOffset set_mxoff = (MultiXactOffset) -1;
+static uint32 minXlogTli = 0;
+static XLogSegNo minXlogSegNo = 0;
+static int WalSegSz;
+static int set_wal_segsize;
+
+static void CheckDataVersion(void);
+static bool read_controlfile(void);
+static void GuessControlValues(void);
+static void PrintControlValues(bool guessed);
+static void PrintNewControlValues(void);
+static void RewriteControlFile(void);
+static void FindEndOfXLOG(void);
+static void KillExistingXLOG(void);
+static void KillExistingArchiveStatus(void);
+static void WriteEmptyXLOG(void);
+static void usage(void);
+
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"commit-timestamp-ids", required_argument, NULL, 'c'},
+ {"pgdata", required_argument, NULL, 'D'},
+ {"epoch", required_argument, NULL, 'e'},
+ {"force", no_argument, NULL, 'f'},
+ {"next-wal-file", required_argument, NULL, 'l'},
+ {"multixact-ids", required_argument, NULL, 'm'},
+ {"dry-run", no_argument, NULL, 'n'},
+ {"next-oid", required_argument, NULL, 'o'},
+ {"multixact-offset", required_argument, NULL, 'O'},
+ {"oldest-transaction-id", required_argument, NULL, 'u'},
+ {"next-transaction-id", required_argument, NULL, 'x'},
+ {"wal-segsize", required_argument, NULL, 1},
+ {NULL, 0, NULL, 0}
+ };
+
+ int c;
+ bool force = false;
+ bool noupdate = false;
+ MultiXactId set_oldestmxid = 0;
+ char *endptr;
+ char *endptr2;
+ char *DataDir = NULL;
+ char *log_fname = NULL;
+ int fd;
+
+ pg_logging_init(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_resetwal"));
+ progname = get_progname(argv[0]);
+
+ if (argc > 1)
+ {
+ if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
+ {
+ usage();
+ exit(0);
+ }
+ if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
+ {
+ puts("pg_resetwal (PostgreSQL) " PG_VERSION);
+ exit(0);
+ }
+ }
+
+
+ while ((c = getopt_long(argc, argv, "c:D:e:fl:m:no:O:u:x:", long_options, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'D':
+ DataDir = optarg;
+ break;
+
+ case 'f':
+ force = true;
+ break;
+
+ case 'n':
+ noupdate = true;
+ break;
+
+ case 'e':
+ set_xid_epoch = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != '\0')
+ {
+ /*------
+ translator: the second %s is a command line argument (-e, etc) */
+ pg_log_error("invalid argument for option %s", "-e");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (set_xid_epoch == -1)
+ {
+ pg_log_error("transaction ID epoch (-e) must not be -1");
+ exit(1);
+ }
+ break;
+
+ case 'u':
+ set_oldest_xid = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-u");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (!TransactionIdIsNormal(set_oldest_xid))
+ {
+ pg_log_error("oldest transaction ID (-u) must be greater than or equal to %u", FirstNormalTransactionId);
+ exit(1);
+ }
+ break;
+
+ case 'x':
+ set_xid = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-x");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (!TransactionIdIsNormal(set_xid))
+ {
+ pg_log_error("transaction ID (-x) must be greater than or equal to %u", FirstNormalTransactionId);
+ exit(1);
+ }
+ break;
+
+ case 'c':
+ set_oldest_commit_ts_xid = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != ',')
+ {
+ pg_log_error("invalid argument for option %s", "-c");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ set_newest_commit_ts_xid = strtoul(endptr + 1, &endptr2, 0);
+ if (endptr2 == endptr + 1 || *endptr2 != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-c");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (set_oldest_commit_ts_xid < 2 &&
+ set_oldest_commit_ts_xid != 0)
+ {
+ pg_log_error("transaction ID (-c) must be either 0 or greater than or equal to 2");
+ exit(1);
+ }
+
+ if (set_newest_commit_ts_xid < 2 &&
+ set_newest_commit_ts_xid != 0)
+ {
+ pg_log_error("transaction ID (-c) must be either 0 or greater than or equal to 2");
+ exit(1);
+ }
+ break;
+
+ case 'o':
+ set_oid = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-o");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (set_oid == 0)
+ {
+ pg_log_error("OID (-o) must not be 0");
+ exit(1);
+ }
+ break;
+
+ case 'm':
+ set_mxid = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != ',')
+ {
+ pg_log_error("invalid argument for option %s", "-m");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ set_oldestmxid = strtoul(endptr + 1, &endptr2, 0);
+ if (endptr2 == endptr + 1 || *endptr2 != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-m");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (set_mxid == 0)
+ {
+ pg_log_error("multitransaction ID (-m) must not be 0");
+ exit(1);
+ }
+
+ /*
+ * XXX It'd be nice to have more sanity checks here, e.g. so
+ * that oldest is not wrapped around w.r.t. nextMulti.
+ */
+ if (set_oldestmxid == 0)
+ {
+ pg_log_error("oldest multitransaction ID (-m) must not be 0");
+ exit(1);
+ }
+ break;
+
+ case 'O':
+ set_mxoff = strtoul(optarg, &endptr, 0);
+ if (endptr == optarg || *endptr != '\0')
+ {
+ pg_log_error("invalid argument for option %s", "-O");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ if (set_mxoff == -1)
+ {
+ pg_log_error("multitransaction offset (-O) must not be -1");
+ exit(1);
+ }
+ break;
+
+ case 'l':
+ if (strspn(optarg, "01234567890ABCDEFabcdef") != XLOG_FNAME_LEN)
+ {
+ pg_log_error("invalid argument for option %s", "-l");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ /*
+ * XLogFromFileName requires wal segment size which is not yet
+ * set. Hence wal details are set later on.
+ */
+ log_fname = pg_strdup(optarg);
+ break;
+
+ case 1:
+ set_wal_segsize = strtol(optarg, &endptr, 10) * 1024 * 1024;
+ if (endptr == optarg || *endptr != '\0')
+ {
+ pg_log_error("argument of --wal-segsize must be a number");
+ exit(1);
+ }
+ if (!IsValidWalSegSize(set_wal_segsize))
+ {
+ pg_log_error("argument of --wal-segsize must be a power of 2 between 1 and 1024");
+ exit(1);
+ }
+ break;
+
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ if (DataDir == NULL && optind < argc)
+ DataDir = argv[optind++];
+
+ /* Complain if any arguments remain */
+ if (optind < argc)
+ {
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+ progname);
+ exit(1);
+ }
+
+ if (DataDir == NULL)
+ {
+ pg_log_error("no data directory specified");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ /*
+ * Don't allow pg_resetwal to be run as root, to avoid overwriting the
+ * ownership of files in the data directory. We need only check for root
+ * -- any other user won't have sufficient permissions to modify files in
+ * the data directory.
+ */
+#ifndef WIN32
+ if (geteuid() == 0)
+ {
+ pg_log_error("cannot be executed by \"root\"");
+ pg_log_info("You must run %s as the PostgreSQL superuser.",
+ progname);
+ exit(1);
+ }
+#endif
+
+ get_restricted_token();
+
+ /* Set mask based on PGDATA permissions */
+ if (!GetDataDirectoryCreatePerm(DataDir))
+ {
+ pg_log_error("could not read permissions of directory \"%s\": %m",
+ DataDir);
+ exit(1);
+ }
+
+ umask(pg_mode_mask);
+
+ if (chdir(DataDir) < 0)
+ {
+ pg_log_error("could not change directory to \"%s\": %m",
+ DataDir);
+ exit(1);
+ }
+
+ /* Check that data directory matches our server version */
+ CheckDataVersion();
+
+ /*
+ * Check for a postmaster lock file --- if there is one, refuse to
+ * proceed, on grounds we might be interfering with a live installation.
+ */
+ if ((fd = open("postmaster.pid", O_RDONLY, 0)) < 0)
+ {
+ if (errno != ENOENT)
+ {
+ pg_log_error("could not open file \"%s\" for reading: %m",
+ "postmaster.pid");
+ exit(1);
+ }
+ }
+ else
+ {
+ pg_log_error("lock file \"%s\" exists", "postmaster.pid");
+ pg_log_info("Is a server running? If not, delete the lock file and try again.");
+ exit(1);
+ }
+
+ /*
+ * Attempt to read the existing pg_control file
+ */
+ if (!read_controlfile())
+ GuessControlValues();
+
+ /*
+ * If no new WAL segment size was specified, use the control file value.
+ */
+ if (set_wal_segsize != 0)
+ WalSegSz = set_wal_segsize;
+ else
+ WalSegSz = ControlFile.xlog_seg_size;
+
+ if (log_fname != NULL)
+ XLogFromFileName(log_fname, &minXlogTli, &minXlogSegNo, WalSegSz);
+
+ /*
+ * Also look at existing segment files to set up newXlogSegNo
+ */
+ FindEndOfXLOG();
+
+ /*
+ * If we're not going to proceed with the reset, print the current control
+ * file parameters.
+ */
+ if ((guessed && !force) || noupdate)
+ PrintControlValues(guessed);
+
+ /*
+ * Adjust fields if required by switches. (Do this now so that printout,
+ * if any, includes these values.)
+ */
+ if (set_xid_epoch != -1)
+ ControlFile.checkPointCopy.nextFullXid =
+ FullTransactionIdFromEpochAndXid(set_xid_epoch,
+ XidFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid));
+
+ if (set_oldest_xid != 0)
+ {
+ ControlFile.checkPointCopy.oldestXid = set_oldest_xid;
+ ControlFile.checkPointCopy.oldestXidDB = InvalidOid;
+ }
+
+ if (set_xid != 0)
+ ControlFile.checkPointCopy.nextFullXid =
+ FullTransactionIdFromEpochAndXid(EpochFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid),
+ set_xid);
+
+ if (set_oldest_commit_ts_xid != 0)
+ ControlFile.checkPointCopy.oldestCommitTsXid = set_oldest_commit_ts_xid;
+ if (set_newest_commit_ts_xid != 0)
+ ControlFile.checkPointCopy.newestCommitTsXid = set_newest_commit_ts_xid;
+
+ if (set_oid != 0)
+ ControlFile.checkPointCopy.nextOid = set_oid;
+
+ if (set_mxid != 0)
+ {
+ ControlFile.checkPointCopy.nextMulti = set_mxid;
+
+ ControlFile.checkPointCopy.oldestMulti = set_oldestmxid;
+ if (ControlFile.checkPointCopy.oldestMulti < FirstMultiXactId)
+ ControlFile.checkPointCopy.oldestMulti += FirstMultiXactId;
+ ControlFile.checkPointCopy.oldestMultiDB = InvalidOid;
+ }
+
+ if (set_mxoff != -1)
+ ControlFile.checkPointCopy.nextMultiOffset = set_mxoff;
+
+ if (minXlogTli > ControlFile.checkPointCopy.ThisTimeLineID)
+ {
+ ControlFile.checkPointCopy.ThisTimeLineID = minXlogTli;
+ ControlFile.checkPointCopy.PrevTimeLineID = minXlogTli;
+ }
+
+ if (set_wal_segsize != 0)
+ ControlFile.xlog_seg_size = WalSegSz;
+
+ if (minXlogSegNo > newXlogSegNo)
+ newXlogSegNo = minXlogSegNo;
+
+ /*
+ * If we had to guess anything, and -f was not given, just print the
+ * guessed values and exit. Also print if -n is given.
+ */
+ if ((guessed && !force) || noupdate)
+ {
+ PrintNewControlValues();
+ if (!noupdate)
+ {
+ printf(_("\nIf these values seem acceptable, use -f to force reset.\n"));
+ exit(1);
+ }
+ else
+ exit(0);
+ }
+
+ /*
+ * Don't reset from a dirty pg_control without -f, either.
+ */
+ if (ControlFile.state != DB_SHUTDOWNED && !force)
+ {
+ printf(_("The database server was not shut down cleanly.\n"
+ "Resetting the write-ahead log might cause data to be lost.\n"
+ "If you want to proceed anyway, use -f to force reset.\n"));
+ exit(1);
+ }
+
+ /*
+ * Else, do the dirty deed.
+ */
+ RewriteControlFile();
+ KillExistingXLOG();
+ KillExistingArchiveStatus();
+ WriteEmptyXLOG();
+
+ printf(_("Write-ahead log reset\n"));
+ return 0;
+}
+
+
+/*
+ * Look at the version string stored in PG_VERSION and decide if this utility
+ * can be run safely or not.
+ *
+ * We don't want to inject pg_control and WAL files that are for a different
+ * major version; that can't do anything good. Note that we don't treat
+ * mismatching version info in pg_control as a reason to bail out, because
+ * recovering from a corrupted pg_control is one of the main reasons for this
+ * program to exist at all. However, PG_VERSION is unlikely to get corrupted,
+ * and if it were it would be easy to fix by hand. So let's make this check
+ * to prevent simple user errors.
+ */
+static void
+CheckDataVersion(void)
+{
+ const char *ver_file = "PG_VERSION";
+ FILE *ver_fd;
+ char rawline[64];
+
+ if ((ver_fd = fopen(ver_file, "r")) == NULL)
+ {
+ pg_log_error("could not open file \"%s\" for reading: %m",
+ ver_file);
+ exit(1);
+ }
+
+ /* version number has to be the first line read */
+ if (!fgets(rawline, sizeof(rawline), ver_fd))
+ {
+ if (!ferror(ver_fd))
+ pg_log_error("unexpected empty file \"%s\"", ver_file);
+ else
+ pg_log_error("could not read file \"%s\": %m", ver_file);
+ exit(1);
+ }
+
+ /* strip trailing newline and carriage return */
+ (void) pg_strip_crlf(rawline);
+
+ if (strcmp(rawline, PG_MAJORVERSION) != 0)
+ {
+ pg_log_error("data directory is of wrong version");
+ pg_log_info("File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\".",
+ ver_file, rawline, PG_MAJORVERSION);
+ exit(1);
+ }
+
+ fclose(ver_fd);
+}
+
+
+/*
+ * Try to read the existing pg_control file.
+ *
+ * This routine is also responsible for updating old pg_control versions
+ * to the current format. (Currently we don't do anything of the sort.)
+ */
+static bool
+read_controlfile(void)
+{
+ int fd;
+ int len;
+ char *buffer;
+ pg_crc32c crc;
+
+ if ((fd = open(XLOG_CONTROL_FILE, O_RDONLY | PG_BINARY, 0)) < 0)
+ {
+ /*
+ * If pg_control is not there at all, or we can't read it, the odds
+ * are we've been handed a bad DataDir path, so give up. User can do
+ * "touch pg_control" to force us to proceed.
+ */
+ pg_log_error("could not open file \"%s\" for reading: %m",
+ XLOG_CONTROL_FILE);
+ if (errno == ENOENT)
+ pg_log_info("If you are sure the data directory path is correct, execute\n"
+ " touch %s\n"
+ "and try again.",
+ XLOG_CONTROL_FILE);
+ exit(1);
+ }
+
+ /* Use malloc to ensure we have a maxaligned buffer */
+ buffer = (char *) pg_malloc(PG_CONTROL_FILE_SIZE);
+
+ len = read(fd, buffer, PG_CONTROL_FILE_SIZE);
+ if (len < 0)
+ {
+ pg_log_error("could not read file \"%s\": %m", XLOG_CONTROL_FILE);
+ exit(1);
+ }
+ close(fd);
+
+ if (len >= sizeof(ControlFileData) &&
+ ((ControlFileData *) buffer)->pg_control_version == PG_CONTROL_VERSION)
+ {
+ /* Check the CRC. */
+ INIT_CRC32C(crc);
+ COMP_CRC32C(crc,
+ buffer,
+ offsetof(ControlFileData, crc));
+ FIN_CRC32C(crc);
+
+ if (!EQ_CRC32C(crc, ((ControlFileData *) buffer)->crc))
+ {
+ /* We will use the data but treat it as guessed. */
+ pg_log_warning("pg_control exists but has invalid CRC; proceed with caution");
+ guessed = true;
+ }
+
+ memcpy(&ControlFile, buffer, sizeof(ControlFile));
+
+ /* return false if WAL segment size is not valid */
+ if (!IsValidWalSegSize(ControlFile.xlog_seg_size))
+ {
+ pg_log_warning(ngettext("pg_control specifies invalid WAL segment size (%d byte); proceed with caution",
+ "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution",
+ ControlFile.xlog_seg_size),
+ ControlFile.xlog_seg_size);
+ return false;
+ }
+
+ return true;
+ }
+
+ /* Looks like it's a mess. */
+ pg_log_warning("pg_control exists but is broken or wrong version; ignoring it");
+ return false;
+}
+
+
+/*
+ * Guess at pg_control values when we can't read the old ones.
+ */
+static void
+GuessControlValues(void)
+{
+ uint64 sysidentifier;
+ struct timeval tv;
+
+ /*
+ * Set up a completely default set of pg_control values.
+ */
+ guessed = true;
+ memset(&ControlFile, 0, sizeof(ControlFile));
+
+ ControlFile.pg_control_version = PG_CONTROL_VERSION;
+ ControlFile.catalog_version_no = CATALOG_VERSION_NO;
+
+ /*
+ * Create a new unique installation identifier, since we can no longer use
+ * any old XLOG records. See notes in xlog.c about the algorithm.
+ */
+ gettimeofday(&tv, NULL);
+ sysidentifier = ((uint64) tv.tv_sec) << 32;
+ sysidentifier |= ((uint64) tv.tv_usec) << 12;
+ sysidentifier |= getpid() & 0xFFF;
+
+ ControlFile.system_identifier = sysidentifier;
+
+ ControlFile.checkPointCopy.redo = SizeOfXLogLongPHD;
+ ControlFile.checkPointCopy.ThisTimeLineID = 1;
+ ControlFile.checkPointCopy.PrevTimeLineID = 1;
+ ControlFile.checkPointCopy.fullPageWrites = false;
+ ControlFile.checkPointCopy.nextFullXid =
+ FullTransactionIdFromEpochAndXid(0, FirstNormalTransactionId);
+ ControlFile.checkPointCopy.nextOid = FirstBootstrapObjectId;
+ ControlFile.checkPointCopy.nextMulti = FirstMultiXactId;
+ ControlFile.checkPointCopy.nextMultiOffset = 0;
+ ControlFile.checkPointCopy.oldestXid = FirstNormalTransactionId;
+ ControlFile.checkPointCopy.oldestXidDB = InvalidOid;
+ ControlFile.checkPointCopy.oldestMulti = FirstMultiXactId;
+ ControlFile.checkPointCopy.oldestMultiDB = InvalidOid;
+ ControlFile.checkPointCopy.time = (pg_time_t) time(NULL);
+ ControlFile.checkPointCopy.oldestActiveXid = InvalidTransactionId;
+
+ ControlFile.state = DB_SHUTDOWNED;
+ ControlFile.time = (pg_time_t) time(NULL);
+ ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
+ ControlFile.unloggedLSN = FirstNormalUnloggedLSN;
+
+ /* minRecoveryPoint, backupStartPoint and backupEndPoint can be left zero */
+
+ ControlFile.wal_level = WAL_LEVEL_MINIMAL;
+ ControlFile.wal_log_hints = false;
+ ControlFile.track_commit_timestamp = false;
+ ControlFile.MaxConnections = 100;
+ ControlFile.max_wal_senders = 10;
+ ControlFile.max_worker_processes = 8;
+ ControlFile.max_prepared_xacts = 0;
+ ControlFile.max_locks_per_xact = 64;
+
+ ControlFile.maxAlign = MAXIMUM_ALIGNOF;
+ ControlFile.floatFormat = FLOATFORMAT_VALUE;
+ ControlFile.blcksz = BLCKSZ;
+ ControlFile.relseg_size = RELSEG_SIZE;
+ ControlFile.xlog_blcksz = XLOG_BLCKSZ;
+ ControlFile.xlog_seg_size = DEFAULT_XLOG_SEG_SIZE;
+ ControlFile.nameDataLen = NAMEDATALEN;
+ ControlFile.indexMaxKeys = INDEX_MAX_KEYS;
+ ControlFile.toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE;
+ ControlFile.loblksize = LOBLKSIZE;
+ ControlFile.float8ByVal = FLOAT8PASSBYVAL;
+
+ /*
+ * XXX eventually, should try to grovel through old XLOG to develop more
+ * accurate values for TimeLineID, nextXID, etc.
+ */
+}
+
+
+/*
+ * Print the guessed pg_control values when we had to guess.
+ *
+ * NB: this display should be just those fields that will not be
+ * reset by RewriteControlFile().
+ */
+static void
+PrintControlValues(bool guessed)
+{
+ if (guessed)
+ printf(_("Guessed pg_control values:\n\n"));
+ else
+ printf(_("Current pg_control values:\n\n"));
+
+ printf(_("pg_control version number: %u\n"),
+ ControlFile.pg_control_version);
+ printf(_("Catalog version number: %u\n"),
+ ControlFile.catalog_version_no);
+ printf(_("Database system identifier: %llu\n"),
+ (unsigned long long) ControlFile.system_identifier);
+ printf(_("Latest checkpoint's TimeLineID: %u\n"),
+ ControlFile.checkPointCopy.ThisTimeLineID);
+ printf(_("Latest checkpoint's full_page_writes: %s\n"),
+ ControlFile.checkPointCopy.fullPageWrites ? _("on") : _("off"));
+ printf(_("Latest checkpoint's NextXID: %u:%u\n"),
+ EpochFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid),
+ XidFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid));
+ printf(_("Latest checkpoint's NextOID: %u\n"),
+ ControlFile.checkPointCopy.nextOid);
+ printf(_("Latest checkpoint's NextMultiXactId: %u\n"),
+ ControlFile.checkPointCopy.nextMulti);
+ printf(_("Latest checkpoint's NextMultiOffset: %u\n"),
+ ControlFile.checkPointCopy.nextMultiOffset);
+ printf(_("Latest checkpoint's oldestXID: %u\n"),
+ ControlFile.checkPointCopy.oldestXid);
+ printf(_("Latest checkpoint's oldestXID's DB: %u\n"),
+ ControlFile.checkPointCopy.oldestXidDB);
+ printf(_("Latest checkpoint's oldestActiveXID: %u\n"),
+ ControlFile.checkPointCopy.oldestActiveXid);
+ printf(_("Latest checkpoint's oldestMultiXid: %u\n"),
+ ControlFile.checkPointCopy.oldestMulti);
+ printf(_("Latest checkpoint's oldestMulti's DB: %u\n"),
+ ControlFile.checkPointCopy.oldestMultiDB);
+ printf(_("Latest checkpoint's oldestCommitTsXid:%u\n"),
+ ControlFile.checkPointCopy.oldestCommitTsXid);
+ printf(_("Latest checkpoint's newestCommitTsXid:%u\n"),
+ ControlFile.checkPointCopy.newestCommitTsXid);
+ printf(_("Maximum data alignment: %u\n"),
+ ControlFile.maxAlign);
+ /* we don't print floatFormat since can't say much useful about it */
+ printf(_("Database block size: %u\n"),
+ ControlFile.blcksz);
+ printf(_("Blocks per segment of large relation: %u\n"),
+ ControlFile.relseg_size);
+ printf(_("WAL block size: %u\n"),
+ ControlFile.xlog_blcksz);
+ printf(_("Bytes per WAL segment: %u\n"),
+ ControlFile.xlog_seg_size);
+ printf(_("Maximum length of identifiers: %u\n"),
+ ControlFile.nameDataLen);
+ printf(_("Maximum columns in an index: %u\n"),
+ ControlFile.indexMaxKeys);
+ printf(_("Maximum size of a TOAST chunk: %u\n"),
+ ControlFile.toast_max_chunk_size);
+ printf(_("Size of a large-object chunk: %u\n"),
+ ControlFile.loblksize);
+ /* This is no longer configurable, but users may still expect to see it: */
+ printf(_("Date/time type storage: %s\n"),
+ _("64-bit integers"));
+ printf(_("Float8 argument passing: %s\n"),
+ (ControlFile.float8ByVal ? _("by value") : _("by reference")));
+ printf(_("Data page checksum version: %u\n"),
+ ControlFile.data_checksum_version);
+}
+
+
+/*
+ * Print the values to be changed.
+ */
+static void
+PrintNewControlValues(void)
+{
+ char fname[MAXFNAMELEN];
+
+ /* This will be always printed in order to keep format same. */
+ printf(_("\n\nValues to be changed:\n\n"));
+
+ XLogFileName(fname, ControlFile.checkPointCopy.ThisTimeLineID,
+ newXlogSegNo, WalSegSz);
+ printf(_("First log segment after reset: %s\n"), fname);
+
+ if (set_mxid != 0)
+ {
+ printf(_("NextMultiXactId: %u\n"),
+ ControlFile.checkPointCopy.nextMulti);
+ printf(_("OldestMultiXid: %u\n"),
+ ControlFile.checkPointCopy.oldestMulti);
+ printf(_("OldestMulti's DB: %u\n"),
+ ControlFile.checkPointCopy.oldestMultiDB);
+ }
+
+ if (set_mxoff != -1)
+ {
+ printf(_("NextMultiOffset: %u\n"),
+ ControlFile.checkPointCopy.nextMultiOffset);
+ }
+
+ if (set_oid != 0)
+ {
+ printf(_("NextOID: %u\n"),
+ ControlFile.checkPointCopy.nextOid);
+ }
+
+ if (set_xid != 0)
+ {
+ printf(_("NextXID: %u\n"),
+ XidFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid));
+ printf(_("OldestXID: %u\n"),
+ ControlFile.checkPointCopy.oldestXid);
+ printf(_("OldestXID's DB: %u\n"),
+ ControlFile.checkPointCopy.oldestXidDB);
+ }
+
+ if (set_xid_epoch != -1)
+ {
+ printf(_("NextXID epoch: %u\n"),
+ EpochFromFullTransactionId(ControlFile.checkPointCopy.nextFullXid));
+ }
+
+ if (set_oldest_commit_ts_xid != 0)
+ {
+ printf(_("oldestCommitTsXid: %u\n"),
+ ControlFile.checkPointCopy.oldestCommitTsXid);
+ }
+ if (set_newest_commit_ts_xid != 0)
+ {
+ printf(_("newestCommitTsXid: %u\n"),
+ ControlFile.checkPointCopy.newestCommitTsXid);
+ }
+
+ if (set_wal_segsize != 0)
+ {
+ printf(_("Bytes per WAL segment: %u\n"),
+ ControlFile.xlog_seg_size);
+ }
+}
+
+
+/*
+ * Write out the new pg_control file.
+ */
+static void
+RewriteControlFile(void)
+{
+ /*
+ * Adjust fields as needed to force an empty XLOG starting at
+ * newXlogSegNo.
+ */
+ XLogSegNoOffsetToRecPtr(newXlogSegNo, SizeOfXLogLongPHD, WalSegSz,
+ ControlFile.checkPointCopy.redo);
+ ControlFile.checkPointCopy.time = (pg_time_t) time(NULL);
+
+ ControlFile.state = DB_SHUTDOWNED;
+ ControlFile.time = (pg_time_t) time(NULL);
+ ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
+ ControlFile.minRecoveryPoint = 0;
+ ControlFile.minRecoveryPointTLI = 0;
+ ControlFile.backupStartPoint = 0;
+ ControlFile.backupEndPoint = 0;
+ ControlFile.backupEndRequired = false;
+
+ /*
+ * Force the defaults for max_* settings. The values don't really matter
+ * as long as wal_level='minimal'; the postmaster will reset these fields
+ * anyway at startup.
+ */
+ ControlFile.wal_level = WAL_LEVEL_MINIMAL;
+ ControlFile.wal_log_hints = false;
+ ControlFile.track_commit_timestamp = false;
+ ControlFile.MaxConnections = 100;
+ ControlFile.max_wal_senders = 10;
+ ControlFile.max_worker_processes = 8;
+ ControlFile.max_prepared_xacts = 0;
+ ControlFile.max_locks_per_xact = 64;
+
+ /* The control file gets flushed here. */
+ update_controlfile(".", &ControlFile, true);
+}
+
+
+/*
+ * Scan existing XLOG files and determine the highest existing WAL address
+ *
+ * On entry, ControlFile.checkPointCopy.redo and ControlFile.xlog_seg_size
+ * are assumed valid (note that we allow the old xlog seg size to differ
+ * from what we're using). On exit, newXlogSegNo is set to suitable
+ * value for the beginning of replacement WAL (in our seg size).
+ */
+static void
+FindEndOfXLOG(void)
+{
+ DIR *xldir;
+ struct dirent *xlde;
+ uint64 segs_per_xlogid;
+ uint64 xlogbytepos;
+
+ /*
+ * Initialize the max() computation using the last checkpoint address from
+ * old pg_control. Note that for the moment we are working with segment
+ * numbering according to the old xlog seg size.
+ */
+ segs_per_xlogid = (UINT64CONST(0x0000000100000000) / ControlFile.xlog_seg_size);
+ newXlogSegNo = ControlFile.checkPointCopy.redo / ControlFile.xlog_seg_size;
+
+ /*
+ * Scan the pg_wal directory to find existing WAL segment files. We assume
+ * any present have been used; in most scenarios this should be
+ * conservative, because of xlog.c's attempts to pre-create files.
+ */
+ xldir = opendir(XLOGDIR);
+ if (xldir == NULL)
+ {
+ pg_log_error("could not open directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+
+ while (errno = 0, (xlde = readdir(xldir)) != NULL)
+ {
+ if (IsXLogFileName(xlde->d_name) ||
+ IsPartialXLogFileName(xlde->d_name))
+ {
+ unsigned int tli,
+ log,
+ seg;
+ XLogSegNo segno;
+
+ /*
+ * Note: We don't use XLogFromFileName here, because we want to
+ * use the segment size from the control file, not the size the
+ * pg_resetwal binary was compiled with
+ */
+ sscanf(xlde->d_name, "%08X%08X%08X", &tli, &log, &seg);
+ segno = ((uint64) log) * segs_per_xlogid + seg;
+
+ /*
+ * Note: we take the max of all files found, regardless of their
+ * timelines. Another possibility would be to ignore files of
+ * timelines other than the target TLI, but this seems safer.
+ * Better too large a result than too small...
+ */
+ if (segno > newXlogSegNo)
+ newXlogSegNo = segno;
+ }
+ }
+
+ if (errno)
+ {
+ pg_log_error("could not read directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+
+ if (closedir(xldir))
+ {
+ pg_log_error("could not close directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+
+ /*
+ * Finally, convert to new xlog seg size, and advance by one to ensure we
+ * are in virgin territory.
+ */
+ xlogbytepos = newXlogSegNo * ControlFile.xlog_seg_size;
+ newXlogSegNo = (xlogbytepos + ControlFile.xlog_seg_size - 1) / WalSegSz;
+ newXlogSegNo++;
+}
+
+
+/*
+ * Remove existing XLOG files
+ */
+static void
+KillExistingXLOG(void)
+{
+ DIR *xldir;
+ struct dirent *xlde;
+ char path[MAXPGPATH + sizeof(XLOGDIR)];
+
+ xldir = opendir(XLOGDIR);
+ if (xldir == NULL)
+ {
+ pg_log_error("could not open directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+
+ while (errno = 0, (xlde = readdir(xldir)) != NULL)
+ {
+ if (IsXLogFileName(xlde->d_name) ||
+ IsPartialXLogFileName(xlde->d_name))
+ {
+ snprintf(path, sizeof(path), "%s/%s", XLOGDIR, xlde->d_name);
+ if (unlink(path) < 0)
+ {
+ pg_log_error("could not delete file \"%s\": %m", path);
+ exit(1);
+ }
+ }
+ }
+
+ if (errno)
+ {
+ pg_log_error("could not read directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+
+ if (closedir(xldir))
+ {
+ pg_log_error("could not close directory \"%s\": %m", XLOGDIR);
+ exit(1);
+ }
+}
+
+
+/*
+ * Remove existing archive status files
+ */
+static void
+KillExistingArchiveStatus(void)
+{
+#define ARCHSTATDIR XLOGDIR "/archive_status"
+
+ DIR *xldir;
+ struct dirent *xlde;
+ char path[MAXPGPATH + sizeof(ARCHSTATDIR)];
+
+ xldir = opendir(ARCHSTATDIR);
+ if (xldir == NULL)
+ {
+ pg_log_error("could not open directory \"%s\": %m", ARCHSTATDIR);
+ exit(1);
+ }
+
+ while (errno = 0, (xlde = readdir(xldir)) != NULL)
+ {
+ if (strspn(xlde->d_name, "0123456789ABCDEF") == XLOG_FNAME_LEN &&
+ (strcmp(xlde->d_name + XLOG_FNAME_LEN, ".ready") == 0 ||
+ strcmp(xlde->d_name + XLOG_FNAME_LEN, ".done") == 0 ||
+ strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.ready") == 0 ||
+ strcmp(xlde->d_name + XLOG_FNAME_LEN, ".partial.done") == 0))
+ {
+ snprintf(path, sizeof(path), "%s/%s", ARCHSTATDIR, xlde->d_name);
+ if (unlink(path) < 0)
+ {
+ pg_log_error("could not delete file \"%s\": %m", path);
+ exit(1);
+ }
+ }
+ }
+
+ if (errno)
+ {
+ pg_log_error("could not read directory \"%s\": %m", ARCHSTATDIR);
+ exit(1);
+ }
+
+ if (closedir(xldir))
+ {
+ pg_log_error("could not close directory \"%s\": %m", ARCHSTATDIR);
+ exit(1);
+ }
+}
+
+
+/*
+ * Write an empty XLOG file, containing only the checkpoint record
+ * already set up in ControlFile.
+ */
+static void
+WriteEmptyXLOG(void)
+{
+ PGAlignedXLogBlock buffer;
+ XLogPageHeader page;
+ XLogLongPageHeader longpage;
+ XLogRecord *record;
+ pg_crc32c crc;
+ char path[MAXPGPATH];
+ int fd;
+ int nbytes;
+ char *recptr;
+
+ memset(buffer.data, 0, XLOG_BLCKSZ);
+
+ /* Set up the XLOG page header */
+ page = (XLogPageHeader) buffer.data;
+ page->xlp_magic = XLOG_PAGE_MAGIC;
+ page->xlp_info = XLP_LONG_HEADER;
+ page->xlp_tli = ControlFile.checkPointCopy.ThisTimeLineID;
+ page->xlp_pageaddr = ControlFile.checkPointCopy.redo - SizeOfXLogLongPHD;
+ longpage = (XLogLongPageHeader) page;
+ longpage->xlp_sysid = ControlFile.system_identifier;
+ longpage->xlp_seg_size = WalSegSz;
+ longpage->xlp_xlog_blcksz = XLOG_BLCKSZ;
+
+ /* Insert the initial checkpoint record */
+ recptr = (char *) page + SizeOfXLogLongPHD;
+ record = (XLogRecord *) recptr;
+ record->xl_prev = 0;
+ record->xl_xid = InvalidTransactionId;
+ record->xl_tot_len = SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPoint);
+ record->xl_info = XLOG_CHECKPOINT_SHUTDOWN;
+ record->xl_rmid = RM_XLOG_ID;
+
+ recptr += SizeOfXLogRecord;
+ *(recptr++) = (char) XLR_BLOCK_ID_DATA_SHORT;
+ *(recptr++) = sizeof(CheckPoint);
+ memcpy(recptr, &ControlFile.checkPointCopy,
+ sizeof(CheckPoint));
+
+ INIT_CRC32C(crc);
+ COMP_CRC32C(crc, ((char *) record) + SizeOfXLogRecord, record->xl_tot_len - SizeOfXLogRecord);
+ COMP_CRC32C(crc, (char *) record, offsetof(XLogRecord, xl_crc));
+ FIN_CRC32C(crc);
+ record->xl_crc = crc;
+
+ /* Write the first page */
+ XLogFilePath(path, ControlFile.checkPointCopy.ThisTimeLineID,
+ newXlogSegNo, WalSegSz);
+
+ unlink(path);
+
+ fd = open(path, O_RDWR | O_CREAT | O_EXCL | PG_BINARY,
+ pg_file_create_mode);
+ if (fd < 0)
+ {
+ pg_log_error("could not open file \"%s\": %m", path);
+ exit(1);
+ }
+
+ errno = 0;
+ if (write(fd, buffer.data, XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ {
+ /* if write didn't set errno, assume problem is no disk space */
+ if (errno == 0)
+ errno = ENOSPC;
+ pg_log_error("could not write file \"%s\": %m", path);
+ exit(1);
+ }
+
+ /* Fill the rest of the file with zeroes */
+ memset(buffer.data, 0, XLOG_BLCKSZ);
+ for (nbytes = XLOG_BLCKSZ; nbytes < WalSegSz; nbytes += XLOG_BLCKSZ)
+ {
+ errno = 0;
+ if (write(fd, buffer.data, XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ {
+ if (errno == 0)
+ errno = ENOSPC;
+ pg_log_error("could not write file \"%s\": %m", path);
+ exit(1);
+ }
+ }
+
+ if (fsync(fd) != 0)
+ {
+ pg_log_error("fsync error: %m");
+ exit(1);
+ }
+
+ close(fd);
+}
+
+
+static void
+usage(void)
+{
+ printf(_("%s resets the PostgreSQL write-ahead log.\n\n"), progname);
+ printf(_("Usage:\n %s [OPTION]... DATADIR\n\n"), progname);
+ printf(_("Options:\n"));
+ printf(_(" -c, --commit-timestamp-ids=XID,XID\n"
+ " set oldest and newest transactions bearing\n"
+ " commit timestamp (zero means no change)\n"));
+ printf(_(" [-D, --pgdata=]DATADIR data directory\n"));
+ printf(_(" -e, --epoch=XIDEPOCH set next transaction ID epoch\n"));
+ printf(_(" -f, --force force update to be done\n"));
+ printf(_(" -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"));
+ printf(_(" -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"));
+ printf(_(" -n, --dry-run no update, just show what would be done\n"));
+ printf(_(" -o, --next-oid=OID set next OID\n"));
+ printf(_(" -O, --multixact-offset=OFFSET set next multitransaction offset\n"));
+ printf(_(" -u, --oldest-transaction-id=XID set oldest transaction ID\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -x, --next-transaction-id=XID set next transaction ID\n"));
+ printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/pg_resetwal/po/cs.po b/src/bin/pg_resetwal/po/cs.po
new file mode 100644
index 0000000..f1ec4d9
--- /dev/null
+++ b/src/bin/pg_resetwal/po/cs.po
@@ -0,0 +1,721 @@
+# Czech message translation file for pg_resetxlog
+# Copyright (C) 2012 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Tomas Vondra <tv@fuzzy.cz>, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetxlog-cs (PostgreSQL 9.3)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-10-31 16:15+0000\n"
+"PO-Revision-Date: 2020-10-31 21:25+0100\n"
+"Last-Translator: Tomas Vondra <tv@fuzzy.cz>\n"
+"Language-Team: Czech <info@cspug.cx>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Poedit 2.4.1\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "error: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "warning: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "nelze načíst knihovnu \"%s\": kód chyby %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "na této platformě nelze vytvářet vyhrazené tokeny: kód chyby %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "nelze otevřít process token: chybový kód %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "nelze alokovat SIDs: chybový kód %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "nelze vytvořit vyhrazený token: chybový kód %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "nelze spustit proces pro příkaz \"%s\": chybový kód %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "nelze znovu spustit s vyhrazeným tokenem: chybový kód %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "nelze získat návratový kód ze subprocesu: chybový kód %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "neplatný argument pro volbu %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Zkuste \"%s --help\" pro více informací.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "epocha ID transakce (-e) nesmí být -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "ID transakce (-x) nesmí být 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "ID transakce (-c) musí být buď 0 nebo větší než nebo rovno 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) nesmí být 0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "ID multitransakce (-m) nesmí být 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "ID nejstarší multitransakce (-m) nesmí být 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "offset multitransakce (-O) nesmí být -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "argument pro --wal-segsize musí být číslo"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "argument pro --wal-segsize musí být mocnina 2 mezi 1 a 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "příliš mnoho parametrů na příkazové řádce (první je \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "není specifikován datový adresář"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "nelze spouštět jako \"root\""
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Musíte spustit %s jako PostgreSQL superuživatel."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "nelze zjistit přístupová práva adresáře \"%s\": %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "nelze změnit adresář na \"%s\" : %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "nelze otevřít soubor \"%s\" pro čtení: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "soubor se zámkem \"%s\" existuje"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Neběží již server? Jestliže ne, smažte soubor se zámkem a zkuste to znova."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Jestliže tyto hodnoty vypadají akceptovatelně, použijte -f pro vynucený reset.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Databázový server nebyl ukončen čistě.\n"
+"Resetování transakčního logu může způsobit ztrátu dat.\n"
+"Jestliže i přesto chcete pokračovat, použijte -f pro vynucený reset.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Transakční log resetován\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "neočekávaný prázdný soubor \"%s\""
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "nelze číst soubor \"%s\": %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "datový adresář pochází z nesprávné verze"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Soubor \"%s\" obsahuje \"%s\", což je nekompatibilní s verzí \"%s\" tohoto programu."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Máte-li jistotu, že je cesta k datovému adresáři správná, proveďte\n"
+" touch %s\n"
+"a zkuste to znovu."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control existuje, ale s neplatným kontrolním součtem CRC; postupujte opatrně"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control obsahuje neplatnou velikost WAL segmentu (%d byte); pokračujte obezřetně"
+msgstr[1] "pg_control obsahuje neplatnou velikost WAL segmentu (%d bytů); pokračujte obezřetně"
+msgstr[2] "pg_control obsahuje neplatnou velikost WAL segmentu (%d bytů); pokračujte obezřetně"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control existuje, ale je poškozen nebo neznámé verze; ignoruji to"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Odhadnuté hodnoty pg_controlu:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Současné pg_control hodnoty:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "Číslo verze pg_controlu: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Číslo verze katalogu: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr ""
+"Identifikátor databázového systému: %llu\n"
+"\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "TimeLineID posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Poslední full_page_writes checkpointu: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "vypnuto"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "zapnuto"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID posledního checkpointu: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "Poslední umístění NextOID checkpointu: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "DB k oldestXID posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "DB k oldestMulti posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid posledního checkpointu: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Maximální zarovnání dat: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Velikost databázového bloku: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Bloků v segmentu velké relace: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Velikost WAL bloku: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Bytů ve WAL segmentu: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Maximální délka identifikátorů: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Maximální počet sloupců v indexu: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Maximální velikost úseku TOAST: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Velikost large-object chunku: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Způsob uložení typu date/time: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64-bitová čísla"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Způsob předávání float8 hodnot: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "odkazem"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "hodnotou"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Verze kontrolních součtů datových stránek: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Hodnoty které se změní:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "První log segment po resetu: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "DB k OldestMulti: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "DB k OldestXID: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID epoch: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "nelze otevřít adresář \"%s\": %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "nelze číst z adresáře \"%s\": %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "nelze zavřít adresář \"%s\": %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "nelze smazat soubor \"%s\": %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "nelze otevřít soubor \"%s\": %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "nelze zapsat soubor \"%s\": %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsync error: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s resetuje PostgreSQL transakční log.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Použití:\n"
+" %s [VOLBA]... ADRESÁŘ\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Přepínače:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" nastaví nejstarší a nejnovější s nastaveným\n"
+" commit timestamp (nula znamená beze změny)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]ADRESÁŘ datový adresář\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH nastaví epochu následujícího ID transakce\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force vynutí provedení update\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFILE vynutí minimální počáteční WAL pozici pro nový transakční log\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID nastav další a nejstarší ID multitransakce\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run bez update, pouze ukáže co by bylo provedeno\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID nastaví následující OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET nastaví offset následující multitransakce\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version ukáže informace o verzi a skončí\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID nastaví ID následující transakce\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=VELIKOST velikost WAL segmentů, v megabytech\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help ukáže tuto nápovědu a skončí\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Chyby hlašte na <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s domácí stránka: <%s>\n"
+
+#~ msgid "%s: cannot be executed by \"root\"\n"
+#~ msgstr "%s: nemůže být spuštěn uživatelem \"root\"\n"
+
+#~ msgid "%s: could not read permissions of directory \"%s\": %s\n"
+#~ msgstr "%s: nelze načíst přístupová práva pro adresář \"%s\": %s\n"
+
+#~ msgid "%s: could not change directory to \"%s\": %s\n"
+#~ msgstr "%s: nelze změnit adresář na \"%s\": %s\n"
+
+#~ msgid "%s: could not open file \"%s\" for reading: %s\n"
+#~ msgstr "%s: nelze otevřít soubor \"%s\" pro čtení: %s\n"
+
+#~ msgid "%s: could not read file \"%s\": %s\n"
+#~ msgstr "%s: nelze číst soubor \"%s\": %s\n"
+
+#~ msgid "%s: could not create pg_control file: %s\n"
+#~ msgstr "%s: nelze vytvořit pg_control soubor: %s\n"
+
+#~ msgid "%s: could not write pg_control file: %s\n"
+#~ msgstr "%s: nelze zapsat pg_control soubor: %s\n"
+
+#~ msgid "%s: could not open directory \"%s\": %s\n"
+#~ msgstr "%s: nelze otevřít adresář \"%s\": %s\n"
+
+#~ msgid "%s: could not read directory \"%s\": %s\n"
+#~ msgstr "%s: nelze číst z adresáře \"%s\": %s\n"
+
+#~ msgid "%s: could not close directory \"%s\": %s\n"
+#~ msgstr "%s: nelze zavřít adresář \"%s\": %s\n"
+
+#~ msgid "%s: could not open file \"%s\": %s\n"
+#~ msgstr "%s: nelze otevřít soubor \"%s\": %s\n"
+
+#~ msgid "%s: could not write file \"%s\": %s\n"
+#~ msgstr "%s: nelze zapsat do souboru \"%s\": %s\n"
+
+#~ msgid "%s: invalid argument for option -x\n"
+#~ msgstr "%s: neplatný argument pro volbu -x\n"
+
+#~ msgid "%s: invalid argument for option -o\n"
+#~ msgstr "%s: neplatný argument pro volbu -o\n"
+
+#~ msgid "%s: invalid argument for option -m\n"
+#~ msgstr "%s: neplatný argument pro volbu -m\n"
+
+#~ msgid "%s: invalid argument for option -O\n"
+#~ msgstr "%s: neplatný argument pro volbu -O\n"
+
+#~ msgid "%s: invalid argument for option -l\n"
+#~ msgstr "%s: neplatný argument pro volbu -l\n"
+
+#~ msgid "floating-point numbers"
+#~ msgstr "čísla s plovoucí řádovou čárkou"
+
+#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n"
+#~ msgstr "%s: interní chyba -- sizeof(ControlFileData) je příliš velký ... opravte PG_CONTROL_SIZE\n"
+
+#~ msgid "First log file ID after reset: %u\n"
+#~ msgstr "První ID log souboru po resetu: %u\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Chyby hlaste na adresu <pgsql-bugs@postgresql.org>.\n"
+
+#~ msgid "Float4 argument passing: %s\n"
+#~ msgstr "Způsob předávání float4 hodnot: %s\n"
diff --git a/src/bin/pg_resetwal/po/de.po b/src/bin/pg_resetwal/po/de.po
new file mode 100644
index 0000000..f81b45b
--- /dev/null
+++ b/src/bin/pg_resetwal/po/de.po
@@ -0,0 +1,662 @@
+# German message translation file for pg_resetwal
+# Peter Eisentraut <peter@eisentraut.org>, 2002 - 2020.
+#
+# Use these quotes: »%s«
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-06 20:29+0000\n"
+"PO-Revision-Date: 2021-08-06 23:03+0200\n"
+"Last-Translator: Peter Eisentraut <peter@eisentraut.org>\n"
+"Language-Team: German <pgsql-translators@postgresql.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "Fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "Fehler: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "Warnung: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "konnte Bibliothek »%s« nicht laden: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "auf dieser Plattform können keine beschränkten Token erzeugt werden: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "konnte Prozess-Token nicht öffnen: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "konnte SIDs nicht erzeugen: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "konnte beschränktes Token nicht erzeugen: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "konnte Prozess für Befehl »%s« nicht starten: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "konnte Prozess nicht mit beschränktem Token neu starten: Fehlercode %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "konnte Statuscode des Subprozesses nicht ermitteln: Fehlercode %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:162 pg_resetwal.c:177 pg_resetwal.c:192 pg_resetwal.c:207
+#: pg_resetwal.c:214 pg_resetwal.c:238 pg_resetwal.c:253 pg_resetwal.c:261
+#: pg_resetwal.c:286 pg_resetwal.c:300
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "ungültiges Argument für Option %s"
+
+#: pg_resetwal.c:163 pg_resetwal.c:178 pg_resetwal.c:193 pg_resetwal.c:208
+#: pg_resetwal.c:215 pg_resetwal.c:239 pg_resetwal.c:254 pg_resetwal.c:262
+#: pg_resetwal.c:287 pg_resetwal.c:301 pg_resetwal.c:327 pg_resetwal.c:340
+#: pg_resetwal.c:348
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n"
+
+#: pg_resetwal.c:168
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "Transaktions-ID-Epoche (-e) darf nicht -1 sein"
+
+#: pg_resetwal.c:183
+#, c-format
+msgid "oldest transaction ID (-u) must be greater than or equal to %u"
+msgstr "älteste Transaktions-ID (-u) muss größer oder gleich %u sein"
+
+#: pg_resetwal.c:198
+#, c-format
+msgid "transaction ID (-x) must be greater than or equal to %u"
+msgstr "Transaktions-ID (-x) muss größer oder gleich %u sein"
+
+#: pg_resetwal.c:222 pg_resetwal.c:229
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "Transaktions-ID (-c) muss entweder 0 oder größer oder gleich 2 sein"
+
+#: pg_resetwal.c:244
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) darf nicht 0 sein"
+
+#: pg_resetwal.c:267
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "Multitransaktions-ID (-m) darf nicht 0 sein"
+
+#: pg_resetwal.c:277
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "älteste Multitransaktions-ID (-m) darf nicht 0 sein"
+
+#: pg_resetwal.c:292
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "Multitransaktions-Offset (-O) darf nicht -1 sein"
+
+#: pg_resetwal.c:316
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "Argument von --wal-segsize muss eine Zahl sein"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "Argument von --wal-segsize muss eine Zweierpotenz zwischen 1 und 1024 sein"
+
+#: pg_resetwal.c:338
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)"
+
+#: pg_resetwal.c:347
+#, c-format
+msgid "no data directory specified"
+msgstr "kein Datenverzeichnis angegeben"
+
+#: pg_resetwal.c:361
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "kann nicht von »root« ausgeführt werden"
+
+#: pg_resetwal.c:362
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Sie müssen %s als PostgreSQL-Superuser ausführen."
+
+#: pg_resetwal.c:373
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "konnte Zugriffsrechte von Verzeichnis »%s« nicht lesen: %m"
+
+#: pg_resetwal.c:382
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "konnte nicht in Verzeichnis »%s« wechseln: %m"
+
+#: pg_resetwal.c:398 pg_resetwal.c:553 pg_resetwal.c:604
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "konnte Datei »%s« nicht zum Lesen öffnen: %m"
+
+#: pg_resetwal.c:405
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "Sperrdatei »%s« existiert"
+
+#: pg_resetwal.c:406
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Läuft der Server? Wenn nicht, dann Sperrdatei löschen und nochmal versuchen."
+
+#: pg_resetwal.c:501
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Wenn diese Werte akzeptabel scheinen, dann benutzen Sie -f um das\n"
+"Zurücksetzen zu erzwingen.\n"
+
+#: pg_resetwal.c:513
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Der Datenbankserver wurde nicht sauber heruntergefahren.\n"
+"Beim Zurücksetzen des Write-Ahead-Logs können Daten verloren gehen.\n"
+"Wenn Sie trotzdem weiter machen wollen, benutzen Sie -f, um das\n"
+"Zurücksetzen zu erzwingen.\n"
+
+#: pg_resetwal.c:527
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Write-Ahead-Log wurde zurückgesetzt\n"
+
+#: pg_resetwal.c:562
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "unerwartete leere Datei »%s«"
+
+#: pg_resetwal.c:564 pg_resetwal.c:620
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "konnte Datei »%s« nicht lesen: %m"
+
+#: pg_resetwal.c:573
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "Datenverzeichnis hat falsche Version"
+
+#: pg_resetwal.c:574
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Datei »%s« enthält »%s«, was nicht mit der Version dieses Programms »%s« kompatibel ist."
+
+#: pg_resetwal.c:607
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Wenn Sie sicher sind, dass das Datenverzeichnis korrekt ist, führen Sie\n"
+" touch %s\n"
+"aus und versuchen Sie es erneut."
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control existiert, aber mit ungültiger CRC; mit Vorsicht fortfahren"
+
+#: pg_resetwal.c:647
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control gibt ungültige WAL-Segmentgröße an (%d Byte); mit Vorsicht fortfahren"
+msgstr[1] "pg_control gibt ungültige WAL-Segmentgröße an (%d Bytes); mit Vorsicht fortfahren"
+
+#: pg_resetwal.c:658
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control existiert, aber ist kaputt oder hat falsche Version; wird ignoriert"
+
+#: pg_resetwal.c:753
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Geschätzte pg_control-Werte:\n"
+"\n"
+
+#: pg_resetwal.c:755
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Aktuelle pg_control-Werte:\n"
+"\n"
+
+#: pg_resetwal.c:757
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_control-Versionsnummer: %u\n"
+
+#: pg_resetwal.c:759
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Katalogversionsnummer: %u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Datenbanksystemidentifikation: %llu\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "TimeLineID des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "full_page_writes des letzten Checkpoints: %s\n"
+
+#: pg_resetwal.c:766
+msgid "off"
+msgstr "aus"
+
+#: pg_resetwal.c:766
+msgid "on"
+msgstr "an"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID des letzten Checkpoints: %u:%u\n"
+
+#: pg_resetwal.c:770
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "NextOID des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:772
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:774
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:776
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:778
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "DB der oldestXID des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:780
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:782
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "DB des oldestMulti des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid des letzten Checkpoints: %u\n"
+
+#: pg_resetwal.c:790
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Maximale Datenausrichtung (Alignment): %u\n"
+
+#: pg_resetwal.c:793
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Datenbankblockgröße: %u\n"
+
+#: pg_resetwal.c:795
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Blöcke pro Segment: %u\n"
+
+#: pg_resetwal.c:797
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "WAL-Blockgröße: %u\n"
+
+#: pg_resetwal.c:799 pg_resetwal.c:885
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Bytes pro WAL-Segment: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Maximale Bezeichnerlänge: %u\n"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Maximale Spalten in einem Index: %u\n"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Maximale Größe eines Stücks TOAST: %u\n"
+
+#: pg_resetwal.c:807
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Größe eines Large-Object-Chunks: %u\n"
+
+#: pg_resetwal.c:810
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Speicherung von Datum/Zeit-Typen: %s\n"
+
+#: pg_resetwal.c:811
+msgid "64-bit integers"
+msgstr "64-Bit-Ganzzahlen"
+
+#: pg_resetwal.c:812
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Übergabe von Float8-Argumenten: %s\n"
+
+#: pg_resetwal.c:813
+msgid "by reference"
+msgstr "Referenz"
+
+#: pg_resetwal.c:813
+msgid "by value"
+msgstr "Wert"
+
+#: pg_resetwal.c:814
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Datenseitenprüfsummenversion: %u\n"
+
+#: pg_resetwal.c:828
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Zu ändernde Werte:\n"
+"\n"
+
+#: pg_resetwal.c:832
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Erstes Logdateisegment nach Zurücksetzen: %s\n"
+
+#: pg_resetwal.c:836
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:838
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:840
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMulti's DB: %u\n"
+
+#: pg_resetwal.c:846
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:852
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:858
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:860
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:862
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID's DB: %u\n"
+
+#: pg_resetwal.c:868
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID-Epoche: %u\n"
+
+#: pg_resetwal.c:874
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:879
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:965 pg_resetwal.c:1033 pg_resetwal.c:1080
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "konnte Verzeichnis »%s« nicht öffnen: %m"
+
+#: pg_resetwal.c:1000 pg_resetwal.c:1053 pg_resetwal.c:1103
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "konnte Verzeichnis »%s« nicht lesen: %m"
+
+#: pg_resetwal.c:1006 pg_resetwal.c:1059 pg_resetwal.c:1109
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "konnte Verzeichnis »%s« nicht schließen: %m"
+
+#: pg_resetwal.c:1045 pg_resetwal.c:1095
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "konnte Datei »%s« nicht löschen: %m"
+
+#: pg_resetwal.c:1176
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "konnte Datei »%s« nicht öffnen: %m"
+
+#: pg_resetwal.c:1186 pg_resetwal.c:1199
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "konnte Datei »%s« nicht schreiben: %m"
+
+#: pg_resetwal.c:1206
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsync-Fehler: %m"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s setzt den PostgreSQL-Write-Ahead-Log zurück.\n"
+"\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Aufruf:\n"
+" %s [OPTION]... DATENVERZEICHNIS\n"
+"\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid "Options:\n"
+msgstr "Optionen:\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" älteste und neuste Transaktion mit Commit-\n"
+" Timestamp setzen (Null bedeutet keine Änderung)\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]VERZ Datenbankverzeichnis\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCHE nächste Transaktions-ID-Epoche setzen\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force Änderung erzwingen\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALDATEI minimale Startposition für neuen WAL setzen\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID nächste und älteste Multitransaktions-ID setzen\n"
+
+#: pg_resetwal.c:1228
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr ""
+" -n, --dry-run keine Änderungen; nur zeigen, was gemacht\n"
+" werden würde\n"
+
+#: pg_resetwal.c:1229
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID nächste OID setzen\n"
+
+#: pg_resetwal.c:1230
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET nächsten Multitransaktions-Offset setzen\n"
+
+#: pg_resetwal.c:1231
+#, c-format
+msgid " -u, --oldest-transaction-id=XID set oldest transaction ID\n"
+msgstr " -u, --oldest-transaction-id=XID älteste Transaktions-ID setzen\n"
+
+#: pg_resetwal.c:1232
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: pg_resetwal.c:1233
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID nächste Transaktions-ID setzen\n"
+
+#: pg_resetwal.c:1234
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=ZAHL Größe eines WAL-Segments, in Megabytes\n"
+
+#: pg_resetwal.c:1235
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: pg_resetwal.c:1236
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Berichten Sie Fehler an <%s>.\n"
+
+#: pg_resetwal.c:1237
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s Homepage: <%s>\n"
diff --git a/src/bin/pg_resetwal/po/es.po b/src/bin/pg_resetwal/po/es.po
new file mode 100644
index 0000000..4403bc0
--- /dev/null
+++ b/src/bin/pg_resetwal/po/es.po
@@ -0,0 +1,663 @@
+# Spanish message translation file for pg_resetwal
+#
+# Copyright (c) 2003-2019, PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Ivan Hernandez <ivanx@ciencias.unam.mx>, 2003.
+# Alvaro Herrera <alvherre@alvh.no-ip.org>, 2004-2014
+# Jaime Casanova <systemguards@gmail.com>, 2005
+# Martín Marqués <martin@2ndquadrant.com>, 2013-2014
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetwal (PostgreSQL) 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-09-13 10:46+0000\n"
+"PO-Revision-Date: 2019-06-06 17:24-0400\n"
+"Last-Translator: Carlos Chapi <carlos.chapi@2ndquadrant.com>\n"
+"Language-Team: PgSQL-es-Ayuda <pgsql-es-ayuda@lists.postgresql.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "error: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "precaución: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "no se pudo cargar la biblioteca «%s»: código de error %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "no se pueden crear tokens restrigidos en esta plataforma: código de error %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "no se pudo abrir el token de proceso: código de error %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "no se pudo emplazar los SIDs: código de error %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "no se pudo crear el token restringido: código de error %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "no se pudo iniciar el proceso para la orden «%s»: código de error %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "no se pudo re-ejecutar con el token restringido: código de error %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "no se pudo obtener el código de salida del subproceso»: código de error %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "argumento no válido para la opción %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Prueba con «%s --help» para más información\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "el «epoch» de ID de transacción (-e) no debe ser -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "el ID de transacción (-x) no debe ser 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "el ID de transacción (-c) debe ser 0 o bien mayor o igual a 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) no debe ser cero"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "el ID de multitransacción (-m) no debe ser 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "el ID de multitransacción más antiguo (-m) no debe ser 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "la posición de multitransacción (-O) no debe ser -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "el argumento de --wal-segsize debe ser un número"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "el argumento de --wal-segsize debe ser una potencia de 2 entre 1 y 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "directorio de datos no especificado"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "no puede ser ejecutado con el usuario «root»"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Debe ejecutar %s con el superusuario de PostgreSQL."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "no se pudo obtener los permisos del directorio «%s»: %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "no se pudo cambiar al directorio «%s»: %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "no se pudo abrir archivo «%s» para lectura: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "el archivo candado «%s» existe"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "¿Hay un servidor corriendo? Si no, borre el archivo candado e inténtelo de nuevo."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Si estos valores parecen aceptables, use -f para forzar reinicio.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"El servidor de bases de datos no se apagó limpiamente.\n"
+"Restablecer el WAL puede causar pérdida de datos.\n"
+"Si quiere continuar de todas formas, use -f para forzar el restablecimiento.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "«Write-ahead log» restablecido\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "archivo vacío inesperado «%s»"
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "no se pudo leer el archivo «%s»: %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "el directorio de datos tiene la versión equivocada"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "El archivo «%s» contiene «%s», que no es compatible con la versión «%s» de este programa."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Si está seguro que la ruta al directorio de datos es correcta, ejecute\n"
+" touch %s\n"
+"y pruebe de nuevo."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "existe pg_control pero tiene un CRC no válido, proceda con precaución"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control especifica un tamaño de segmento de WAL no válido (%d byte), proceda con precaución"
+msgstr[1] "pg_control especifica un tamaño de segmento de WAL no válido (%d bytes), proceda con precaución"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "existe pg_control pero está roto o tiene la versión equivocada; ignorándolo"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Valores de pg_control asumidos:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Valores actuales de pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "Número de versión de pg_control: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Número de versión de catálogo: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Identificador de sistema: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "TimeLineID del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "full_page_writes del checkpoint más reciente: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "desactivado"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "activado"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID del checkpoint más reciente: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "NextOID del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "BD del oldestXID del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid del checkpoint más reciente: %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "BD del oldestMultiXid del checkpt. más reciente: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid del último checkpoint: %u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid del último checkpoint: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Máximo alineamiento de datos: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Tamaño del bloque de la base de datos: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Bloques por segmento de relación grande: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Tamaño del bloque de WAL: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Bytes por segmento WAL: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Longitud máxima de identificadores: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Máximo número de columnas en un índice: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Longitud máxima de un trozo TOAST: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Longitud máxima de un trozo de objeto grande: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Tipo de almacenamiento hora/fecha: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "enteros de 64 bits"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Paso de parámetros float8: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "por referencia"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "por valor"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Versión de suma de verificación de datos: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Valores a cambiar:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Primer segmento de log después de reiniciar: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "Base de datos del OldestMulti: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "Base de datos del OldestXID: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "Epoch del NextXID: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "no se pudo abrir el directorio «%s»: %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "no se pudo leer el directorio «%s»: %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "no se pudo abrir el directorio «%s»: %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "no se pudo borrar el archivo «%s»: %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "no se pudo abrir el archivo «%s»: %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "no se pudo escribir el archivo «%s»: %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "error de fsync: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s restablece el WAL («write-ahead log») de PostgreSQL.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Uso:\n"
+" %s [OPCIÓN]... DATADIR\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Opciones:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" definir la más antigua y la más nueva transacciones\n"
+" que llevan timestamp de commit (cero significa no\n"
+" cambiar)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR directorio de datos\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH asigna el siguiente «epoch» de ID de transacción\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force fuerza que la actualización sea hecha\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr ""
+" -l, --next-wal-file=ARCHIVOWAL\n"
+" fuerza una ubicación inicial mínima para nuevo WAL\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr ""
+" -m, --multixact-ids=MXID,MXID\n"
+" asigna el siguiente ID de multitransacción y\n"
+" el más antiguo\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run no actualiza, sólo muestra lo que se haría\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID asigna el siguiente OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr ""
+" -O, --multixact-offset=OFFSET\n"
+" asigna la siguiente posición de multitransacción\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostrar información de versión y salir\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr ""
+" -x, --next-transaction-id=XID\n"
+" asigna el siguiente ID de transacción\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=TAMAÑO tamaño de segmentos de WAL, en megabytes\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Reporte errores a <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Sitio web de %s: <%s>\n"
diff --git a/src/bin/pg_resetwal/po/fr.po b/src/bin/pg_resetwal/po/fr.po
new file mode 100644
index 0000000..4ebf78c
--- /dev/null
+++ b/src/bin/pg_resetwal/po/fr.po
@@ -0,0 +1,793 @@
+# translation of pg_resetxlog.po to fr_fr
+# french message translation file for pg_resetxlog
+#
+# Use these quotes: « %s »
+#
+# Guillaume Lelarge <guillaume@lelarge.info>, 2003-2009.
+# Stéphane Schildknecht <stephane.schildknecht@dalibo.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-04-16 06:16+0000\n"
+"PO-Revision-Date: 2020-04-16 14:06+0200\n"
+"Last-Translator: Guillaume Lelarge <guillaume@lelarge.info>\n"
+"Language-Team: PostgreSQLfr <pgsql-fr-generale@postgresql.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.3\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal : "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "erreur : "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "attention : "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "n'a pas pu charger la bibliothèque « %s » : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "ne peut pas créer les jetons restreints sur cette plateforme : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "n'a pas pu ouvrir le jeton du processus : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "n'a pas pu allouer les SID : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "n'a pas pu créer le jeton restreint : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "argument invalide pour l'option %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Essayer « %s --help » pour plus d'informations.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "la valeur epoch de l'identifiant de transaction (-e) ne doit pas être -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "l'identifiant de la transaction (-x) ne doit pas être 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "l'identifiant de transaction (-c) doit être 0 ou supérieur ou égal à 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "l'OID (-o) ne doit pas être 0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "l'identifiant de multi-transaction (-m) ne doit pas être 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "l'identifiant de multi-transaction le plus ancien (-m) ne doit pas être 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "le décalage de multi-transaction (-O) ne doit pas être -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "l'argument de --wal-segsize doit être un nombre"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "l'argument de --wal-segsize doit être une puissance de 2 comprise entre 1 et 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "aucun répertoire de données indiqué"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "ne peut pas être exécuté par « root »"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Vous devez exécuter %s en tant que super-utilisateur PostgreSQL."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "n'a pas pu lire les droits du répertoire « %s » : %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "n'a pas pu modifier le répertoire par « %s » : %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "n'a pas pu ouvrir le fichier « %s » pour une lecture : %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "le fichier verrou « %s » existe"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Le serveur est-il démarré ? Sinon, supprimer le fichier verrou et réessayer."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Si ces valeurs semblent acceptables, utiliser -f pour forcer la\n"
+"réinitialisation.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Le serveur de bases de données n'a pas été arrêté proprement.\n"
+"Ré-initialiser le journal des transactions peut occasionner des pertes de\n"
+"données.\n"
+"Pour continuer malgré tout, utiliser -f pour forcer la\n"
+"réinitialisation.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Réinitialisation des journaux de transactions\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "fichier vide inattendu « %s »"
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "n'a pas pu lire le fichier « %s » : %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "le répertoire des données a une mauvaise version"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Le fichier « %s » contient « %s », qui n'est pas compatible avec la version « %s » de ce programme."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Si vous êtes certain que le chemin du répertoire de données est correct, exécuter\n"
+" touch %s\n"
+"et réessayer."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control existe mais son CRC est invalide ; agir avec précaution"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control spécifie une taille invalide de segment WAL (%d octet) ; agir avec précaution"
+msgstr[1] "pg_control spécifie une taille invalide de segment WAL (%d octets) ; agir avec précaution"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control existe mais est corrompu ou de mauvaise version ; ignoré"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Valeurs de pg_control devinées :\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Valeurs actuelles de pg_control :\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "Numéro de version de pg_control : %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Numéro de version du catalogue : %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Identifiant du système de base de données : %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "Dernier TimeLineID du point de contrôle : %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Dernier full_page_writes du point de contrôle : %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "désactivé"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "activé"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "Dernier NextXID du point de contrôle : %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "Dernier NextOID du point de contrôle : %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "Dernier NextMultiXactId du point de contrôle : %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "Dernier NextMultiOffset du point de contrôle : %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "Dernier oldestXID du point de contrôle : %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "Dernier oldestXID du point de contrôle de la base : %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "Dernier oldestActiveXID du point de contrôle : %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "Dernier oldestMultiXID du point de contrôle : %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "Dernier oldestMulti du point de contrôle de la base : %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "Dernier oldestCommitTsXid du point de contrôle : %u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "Dernier newestCommitTsXid du point de contrôle : %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Alignement maximal des données : %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Taille du bloc de la base de données : %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Blocs par segment des relations volumineuses : %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Taille de bloc du journal de transaction : %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Octets par segment du journal de transaction : %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Longueur maximale des identifiants : %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Nombre maximal de colonnes d'un index: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Longueur maximale d'un morceau TOAST : %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Taille d'un morceau de Large Object : %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Stockage du type date/heure : %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "entiers 64-bits"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Passage d'argument float8 : %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "par référence"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "par valeur"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Version des sommes de contrôle des pages de données : %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Valeurs à changer :\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Premier segment du journal après réinitialisation : %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMulti's DB: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID's DB: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID Epoch: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "n'a pas pu ouvrir le répertoire « %s » : %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "n'a pas pu lire le répertoire « %s » : %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "n'a pas pu fermer le répertoire « %s » : %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "n'a pas pu supprimer le fichier « %s » : %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "n'a pas pu ouvrir le fichier « %s » : %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "impossible d'écrire le fichier « %s » : %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "erreur fsync : %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s réinitialise le journal des transactions PostgreSQL.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Usage :\n"
+" %s [OPTION]... RÉP_DONNÉES\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Options :\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" configure les transactions la plus ancienne et la plus récent\n"
+" contenant les dates/heures de validation (zéro signifie aucun\n"
+" changement)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=] RÉPDONNEES répertoire de la base de données\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr ""
+" -e, --epoch XIDEPOCH fixe la valeur epoch du prochain identifiant de\n"
+" transaction\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force force la mise à jour\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr ""
+" -l, --next-wal-file=FICHIERWAL force l'emplacement minimal de début des WAL du nouveau\n"
+" journal de transactions\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID fixe le prochain et le plus ancien identifiants multi-transaction\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n pas de mise à jour, affiche simplement ce qui sera fait\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID fixe le prochain OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=DÉCALAGE configure le prochain décalage multitransaction\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version, puis quitte\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID configure le prochain identifiant de transaction\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=TAILLE taille des segments WAL, en megaoctets\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide, puis quitte\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapporter les bogues à <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "page d'accueil %s : %s\n"
+
+#~ msgid "%s: WARNING: cannot create restricted tokens on this platform\n"
+#~ msgstr "%s : ATTENTION : ne peut pas créer les jetons restreints sur cette plateforme\n"
+
+#~ msgid "%s: could not open process token: error code %lu\n"
+#~ msgstr "%s : n'a pas pu ouvrir le jeton du processus : code d'erreur %lu\n"
+
+#~ msgid "%s: could not allocate SIDs: error code %lu\n"
+#~ msgstr "%s : n'a pas pu allouer les SID : code d'erreur %lu\n"
+
+#~ msgid "%s: could not create restricted token: error code %lu\n"
+#~ msgstr "%s : n'a pas pu créer le jeton restreint : code d'erreur %lu\n"
+
+#~ msgid "%s: could not start process for command \"%s\": error code %lu\n"
+#~ msgstr "%s : n'a pas pu démarrer le processus pour la commande « %s » : code d'erreur %lu\n"
+
+#~ msgid "%s: could not re-execute with restricted token: error code %lu\n"
+#~ msgstr "%s : n'a pas pu ré-exécuter le jeton restreint : code d'erreur %lu\n"
+
+#~ msgid "%s: could not get exit code from subprocess: error code %lu\n"
+#~ msgstr "%s : n'a pas pu récupérer le code de statut du sous-processus : code d'erreur %lu\n"
+
+#~ msgid "%s: argument of --wal-segsize must be a number\n"
+#~ msgstr "%s : l'argument de --wal-segsize doit être un nombre\n"
+
+#~ msgid "%s: argument of --wal-segsize must be a power of 2 between 1 and 1024\n"
+#~ msgstr "%s : l'argument de --wal-segsize doit être une puissance de 2 entre 1 et 1024\n"
+
+#~ msgid "%s: too many command-line arguments (first is \"%s\")\n"
+#~ msgstr "%s : trop d'arguments en ligne de commande (le premier étant « %s »)\n"
+
+#~ msgid "%s: no data directory specified\n"
+#~ msgstr "%s : aucun répertoire de données indiqué\n"
+
+#~ msgid "%s: cannot be executed by \"root\"\n"
+#~ msgstr "%s : ne peut pas être exécuté par « root »\n"
+
+#~ msgid "%s: could not read permissions of directory \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu lire les droits sur le répertoire « %s » : %s\n"
+
+#~ msgid "%s: could not change directory to \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu accéder au répertoire « %s » : %s\n"
+
+#~ msgid "%s: could not open file \"%s\" for reading: %s\n"
+#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » en lecture : %s\n"
+
+#~ msgid "%s: could not read file \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu lire le fichier « %s » : %s\n"
+
+#~ msgid "%s: could not create pg_control file: %s\n"
+#~ msgstr "%s : n'a pas pu créer le fichier pg_control : %s\n"
+
+#~ msgid "%s: could not write pg_control file: %s\n"
+#~ msgstr "%s : n'a pas pu écrire le fichier pg_control : %s\n"
+
+#~ msgid "%s: could not open directory \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu ouvrir le répertoire « %s » : %s\n"
+
+#~ msgid "%s: could not read directory \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu lire le répertoire « %s » : %s\n"
+
+#~ msgid "%s: could not close directory \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu fermer le répertoire « %s » : %s\n"
+
+#~ msgid "%s: could not delete file \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu supprimer le fichier « %s » : %s\n"
+
+#~ msgid "%s: could not open file \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu ouvrir le fichier « %s » : %s\n"
+
+#~ msgid "%s: could not write file \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu écrire le fichier « %s » : %s\n"
+
+#~ msgid "Transaction log reset\n"
+#~ msgstr "Réinitialisation du journal des transactions\n"
+
+#~ msgid "floating-point numbers"
+#~ msgstr "nombres à virgule flottante"
+
+#~ msgid "%s: invalid argument for option -x\n"
+#~ msgstr "%s : argument invalide pour l'option -x\n"
+
+#~ msgid "%s: invalid argument for option -o\n"
+#~ msgstr "%s : argument invalide pour l'option -o\n"
+
+#~ msgid "%s: invalid argument for option -m\n"
+#~ msgstr "%s : argument invalide pour l'option -m\n"
+
+#~ msgid "%s: invalid argument for option -O\n"
+#~ msgstr "%s : argument invalide pour l'option -O\n"
+
+#~ msgid "%s: invalid argument for option -l\n"
+#~ msgstr "%s : argument invalide pour l'option -l\n"
+
+#~ msgid "%s: could not read from directory \"%s\": %s\n"
+#~ msgstr "%s : n'a pas pu lire le répertoire « %s » : %s\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help affiche cette aide et quitte\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version afficherla version et quitte\n"
+
+#~ msgid "First log file ID after reset: %u\n"
+#~ msgstr "Premier identifiant du journal après réinitialisation : %u\n"
+
+#~ msgid " -?, --help show this help, then exit\n"
+#~ msgstr " -?, --help affiche cette aide et quitte\n"
+
+#~ msgid " -x XID set next transaction ID\n"
+#~ msgstr " -x XID fixe le prochain identifiant de transaction\n"
+
+#~ msgid " -V, --version output version information, then exit\n"
+#~ msgstr " -V, --version affiche la version et quitte\n"
+
+#~ msgid " (zero in either value means no change)\n"
+#~ msgstr " (zéro dans l'une des deux valeurs signifie aucun changement)\n"
+
+#~ msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n"
+#~ msgstr " -c XID,XID configure la plus ancienne et la plus récente transaction\n"
+
+#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n"
+#~ msgstr ""
+#~ "%s : erreur interne -- sizeof(ControlFileData) est trop important...\n"
+#~ "corrigez PG_CONTROL_SIZE\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapporter les bogues à <pgsql-bugs@lists.postgresql.org>.\n"
+
+#~ msgid "Float4 argument passing: %s\n"
+#~ msgstr "Passage d'argument float4 : %s\n"
diff --git a/src/bin/pg_resetwal/po/ja.po b/src/bin/pg_resetwal/po/ja.po
new file mode 100644
index 0000000..b14af6e
--- /dev/null
+++ b/src/bin/pg_resetwal/po/ja.po
@@ -0,0 +1,740 @@
+# Japanese message translation file for pg_resetwal
+# Copyright (C) 2019 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package.
+# Shigehiro Honda <fwif0083@mb.infoweb.ne.jp>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetwal (PostgreSQL 13)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-08-21 15:55+0900\n"
+"PO-Revision-Date: 2020-09-13 08:56+0200\n"
+"Last-Translator: Kyotaro Horiguchi <horikyota.ntt@gmail.com>\n"
+"Language-Team: Japan PostgreSQL Users Group <jpug-doc@ml.postgresql.jp>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.13\n"
+
+#: ../../../src/common/logging.c:241
+#, c-format
+msgid "fatal: "
+msgstr "致命的エラー: "
+
+#: ../../../src/common/logging.c:248
+#, c-format
+msgid "error: "
+msgstr "エラー: "
+
+#: ../../../src/common/logging.c:255
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "ライブラリ\"%s\"をロードできませんでした: エラーコード %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "このプラットフォームでは制限付きトークンを生成できません: エラーコード %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "プロセストークンをオープンできませんでした: エラーコード %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "SIDを割り当てられませんでした: エラーコード %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "制限付きトークンを作成できませんでした: エラーコード %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "\"%s\"コマンドのプロセスを起動できませんでした: エラーコード %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "制限付きトークンで再実行できませんでした: %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "サブプロセスの終了コードを入手できませんでした。: エラーコード %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "オプション%sの引数が不正です"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "詳細は\"%s --help\"を実行してください。\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "トランザクションIDの基点(-e)は-1にはできません"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "トランザクションID(-x)は0にはできません"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "トランザクションID(-c)は0もしくは2以上でなければなりません"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID(-o)は0にはできません"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "マルチトランザクションID(-m)は0にはできません"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "最古のマルチトランザクションID(-m)は0にはできません"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "マルチトランザクションオフセット(-O)は-1にはできません"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "--wal-segsizの引数は数値でなければなりません"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "--wal-segsizeの引数は1から1024の間の2のべき乗でなければなりません"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "コマンドライン引数が多すぎます。(先頭は\"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "データディレクトリが指定されていません"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "\"root\"では実行できません"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "PostgreSQLのスーパユーザで%sを実行しなければなりません"
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "ディレクトリ\"%s\"の権限を読み取れませんでした: %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "ディレクトリ\"%s\"に移動できませんでした: %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "ファイル\"%s\"を読み取り用にオープンできませんでした: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "ロックファイル\"%s\"が存在します"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "サーバが稼動していませんか? そうでなければロックファイルを削除し再実行してください。"
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"この値が適切だと思われるのであれば、-fを使用して強制リセットしてください。\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"データベースサーバが正しくシャットダウンされていませんでした。\n"
+"先行書き込みログのリセットにはデータ損失の恐れがあります。\n"
+"とにかく処理したいのであれば、-fでリセットを強制してください。\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "先行書き込みログがリセットされました\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "想定外の空のファイル\"%s\""
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "ファイル\"%s\"の読み取りに失敗しました: %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "データディレクトリのバージョンが違います"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "ファイル\"%s\"では\"%s\"となっています、これはこのプログラムのバージョン\"%s\"と互換性がありません"
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"確実にデータディレクトリのパスが正しければ、\n"
+" touch %s\n"
+"の後に再実行してください。"
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_controlがありましたが、CRCが不正でした; 注意して進めてください"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_controlにあるWALセグメントサイズ(%dバイト)は不正です; 注意して進めてください"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_controlがありましたが、破損あるいは間違ったバージョンです; 無視します"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"pg_controlの推測値:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"現在のpg_controlの値:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_controlバージョン番号: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "カタログバージョン番号: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "データベースシステム識別子: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "最終チェックポイントの時系列ID: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "最終チェックポイントのfull_page_writes: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "オフ"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "オン"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "最終チェックポイントのNextXID: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "最終チェックポイントのNextOID: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "最終チェックポイントのNextMultiXactId: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "最終チェックポイントのNextMultiOffset: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "最終チェックポイントのoldestXID: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "最終チェックポイントのoldestXIDのDB: %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "最終チェックポイントのoldestActiveXID: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "最終チェックポイントのoldestMultiXid: %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "最終チェックポイントのoldestMultiのDB: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "最終チェックポイントのoldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "最終チェックポイントのnewestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "最大データアラインメント: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "データベースのブロックサイズ: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "大きなリレーションのセグメント毎のブロック数:%u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "WALのブロックサイズ: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "WALセグメント当たりのバイト数: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "識別子の最大長: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "インデックス内の最大列数: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "TOASTチャンクの最大サイズ: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "ラージオブジェクトチャンクのサイズ: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "日付/時刻型の格納方式: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64ビット整数"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Float8引数の渡し方: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "参照渡し"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "値渡し"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "データベージチェックサムのバージョン: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"変更される値:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "リセット後最初のログセグメント: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMultiのDB: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXIDのDB: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID基点: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "ディレクトリ\"%s\"を読み取れませんでした: %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "ディレクトリ\"%s\"をクローズできませんでした: %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "ファイル\"%s\"を削除できませんでした: %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "ファイル\"%s\"をオープンできませんでした: %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "ファイル\"%s\"を書き出せませんでした: %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsyncエラー: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLの先行書き込みログをリセットします。\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"使用方法:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "オプション:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" コミットタイムスタンプを持つ最古と最新の\n"
+" トランザクション(0は変更しないことを意味する)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR データディレクトリ\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH 次のトランザクションIDの基点を設定\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force 強制的に更新を実施\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFILE 新しいWALの最小開始ポイントを設定\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID 次および最古のマルチトランザクションIDを設定\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run 更新をせず、単に何が行なわれるかを表示\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID 次のOIDを設定\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET 次のマルチトランザクションオフセットを設定\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID 次のトランザクションIDを設定\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=SIZE WALセグメントのサイズ、単位はメガバイト\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"バグは<%s>に報告してください。\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s ホームページ: <%s>\n"
+
+#~ msgid "%s: cannot be executed by \"root\"\n"
+#~ msgstr "%s: \"root\"では実行できません\n"
+
+#~ msgid "%s: could not change directory to \"%s\": %s\n"
+#~ msgstr "%s: ディレクトリ\"%s\"に移動できませんでした: %s\n"
+
+#~ msgid "%s: could not open file \"%s\" for reading: %s\n"
+#~ msgstr "%s: 読み取り用のファイル\"%s\"をオープンできませんでした: %s\n"
+
+#~ msgid "Transaction log reset\n"
+#~ msgstr "トランザクションログをリセットします。\n"
+
+#~ msgid "%s: could not read file \"%s\": %s\n"
+#~ msgstr "%s: ファイル\"%s\"を読み込めませんでした: %s\n"
+
+#~ msgid "floating-point numbers"
+#~ msgstr "浮動小数点数"
+
+#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n"
+#~ msgstr "%s: 内部エラー -- sizeof(ControlFileData)が大きすぎます ... PG_CONTROL_SIZEを修正してください\n"
+
+#~ msgid "%s: could not create pg_control file: %s\n"
+#~ msgstr "%s: pg_controlファイルを作成できませんでした: %s\n"
+
+#~ msgid "%s: could not write pg_control file: %s\n"
+#~ msgstr "%s: pg_controlファイルを書き込めませんでした: %s\n"
+
+#~ msgid "%s: could not open directory \"%s\": %s\n"
+#~ msgstr "%s: ディレクトリ\"%s\"をオープンできませんでした: %s\n"
+
+#~ msgid "%s: could not read directory \"%s\": %s\n"
+#~ msgstr "%s: ディレクトリ\"%s\"を読み取ることができませんでした。: %s\n"
+
+#~ msgid "%s: could not close directory \"%s\": %s\n"
+#~ msgstr "%s: ディレクトリ \"%s\" をクローズできませんでした: %s\n"
+
+#~ msgid "%s: could not delete file \"%s\": %s\n"
+#~ msgstr "%s: ファイル\"%s\"を削除できませんでした: %s\n"
+
+#~ msgid "%s: could not open file \"%s\": %s\n"
+#~ msgstr "%s: ファイル\"%s\"をオープンできませんでした: %s\n"
+
+#~ msgid "%s: could not write file \"%s\": %s\n"
+#~ msgstr "%s: ファイル\"%s\"を書き込めませんでした: %s\n"
+
+#~ msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n"
+#~ msgstr " -c XID,XID コミットタイムスタンプを作成する最も古いトランザクションと最も新しいトランザクションを設定します\n"
+
+#~ msgid " (zero in either value means no change)\n"
+#~ msgstr " (いずれかの値での0は変更がないことを意味します)\n"
+
+#~ msgid " [-D] DATADIR data directory\n"
+#~ msgstr " [-D] DATADIR データベースディレクトリ\n"
+
+#~ msgid " -V, --version output version information, then exit\n"
+#~ msgstr " -V, --version バージョン情報を出力、終了します\n"
+
+#~ msgid " -x XID set next transaction ID\n"
+#~ msgstr " -x XID 次のトランザクションIDを設定します\n"
+
+#~ msgid " -?, --help show this help, then exit\n"
+#~ msgstr " -?, --help このヘルプを表示し、終了します\n"
+
+#~ msgid "First log file ID after reset: %u\n"
+#~ msgstr "リセット後、現在のログファイルID: %u\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help ヘルプを表示し、終了します\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version バージョン情報を表示し、終了します\n"
+
+#~ msgid "%s: could not read from directory \"%s\": %s\n"
+#~ msgstr "%s: ディレクトリ\"%s\"から読み込めませんでした: %s\n"
+
+#~ msgid "%s: invalid argument for option -l\n"
+#~ msgstr "%s: オプション-lの引数が無効です\n"
+
+#~ msgid "%s: invalid argument for option -O\n"
+#~ msgstr "%s: オプション-Oの引数が無効です\n"
+
+#~ msgid "%s: invalid argument for option -m\n"
+#~ msgstr "%s: オプション-mの引数が無効です\n"
+
+#~ msgid "%s: invalid argument for option -o\n"
+#~ msgstr "%s: オプション-oの引数が無効です\n"
+
+#~ msgid "%s: invalid argument for option -x\n"
+#~ msgstr "%s: オプション-xの引数が無効です\n"
+
+#~ msgid "Float4 argument passing: %s\n"
+#~ msgstr "Float4引数の渡し方: %s\n"
diff --git a/src/bin/pg_resetwal/po/ko.po b/src/bin/pg_resetwal/po/ko.po
new file mode 100644
index 0000000..03e30bc
--- /dev/null
+++ b/src/bin/pg_resetwal/po/ko.po
@@ -0,0 +1,662 @@
+# Korean message translation file for PostgreSQL pg_resetxlog
+# Ioseph Kim <ioseph@uri.sarang.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetwal (PostgreSQL) 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-10-05 20:45+0000\n"
+"PO-Revision-Date: 2020-10-06 13:44+0900\n"
+"Last-Translator: Ioseph Kim <ioseph@uri.sarang.net>\n"
+"Language-Team: Korean Team <pgsql-kr@postgresql.kr>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "심각: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "오류: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "경고: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "\"%s\" 라이브러리를 로드할 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "이 운영체제에서 restricted token을 만들 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "프로세스 토큰을 열 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "SID를 할당할 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "상속된 토큰을 만들 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "\"%s\" 명령용 프로세스를 시작할 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "상속된 토큰으로 재실행할 수 없음: 오류 코드 %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "하위 프로세스의 종료 코드를 구할 수 없음: 오류 코드 %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "%s 옵션의 잘못된 인자"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "자세한 사용법은 \"%s --help\"\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "트랜잭션 ID epoch (-e) 값은 -1이 아니여야함"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "트랜잭션 ID (-x) 값은 0이 아니여야함"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "-c 옵션으로 지정한 트랜잭션 ID는 0이거나 2이상이어야 함"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) 값은 0이 아니여야함"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "멀티트랜잭션 ID (-m) 값은 0이 아니여야함"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "제일 오래된 멀티트랜잭션 ID (-m) 값은 0이 아니여야함"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "멀티트랜잭션 옵셋 (-O) 값은 -1이 아니여야함"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "--wal-segsize 값은 숫자여야 합니다"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "--wal-segsize 값은 1부터 1024사이 2^n 값이어야 합니다"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "너무 많은 명령행 인수를 지정했습니다. (처음 \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "데이터 디렉터리를 지정하지 않았음"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "\"root\" 계정으로는 실행 할 수 없음"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "PostgreSQL superuser로 %s 프로그램을 실행하십시오."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "\"%s\" 디렉터리 읽기 권한 없음: %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "\"%s\" 이름의 디렉터리로 이동할 수 없습니다: %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "\"%s\" 파일 일기 모드로 열기 실패: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "\"%s\" 잠금 파일이 있음"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr ""
+"서버가 가동중인가요? 그렇지 않다면, 이 파일을 지우고 다시 시도하십시오."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"이 설정값들이 타당하다고 판단되면, 강제로 갱신하려면, -f 옵션을 쓰세요.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"이 데이터베이스 서버는 정상적으로 중지되지 못했습니다.\n"
+"트랜잭션 로그를 다시 설정하는 것은 자료 손실을 야기할 수 있습니다.\n"
+"그럼에도 불구하고 진행하려면, -f 옵션을 사용해서 강제 설정을 하십시오.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "트랜잭션 로그 재설정\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "\"%s\" 파일은 예상치 않게 비었음"
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "\"%s\" 파일을 읽을 수 없음: %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "잘못된 버전의 데이터 디렉터리입니다."
+
+#: pg_resetwal.c:565
+#, c-format
+msgid ""
+"File \"%s\" contains \"%s\", which is not compatible with this program's "
+"version \"%s\"."
+msgstr "\"%s\" 파일 버전은 \"%s\", 이 프로그램 버전은 \"%s\"."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"지정한 데이터 디렉터리가 맞다면, 다음 명령을 실행하고, 다시 시도해\n"
+"보십시오.\n"
+" touch %s"
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control 파일이 있지만, CRC값이 잘못되었습니다; 경고와 함께 진행함"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid ""
+"pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural ""
+"pg_control specifies invalid WAL segment size (%d bytes); proceed with "
+"caution"
+msgstr[0] ""
+"pg_control 파일에 잘못된 WAL 조각 파일 크기(%d 바이트)가 지정됨; 경고와 함께 "
+"진행함"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control 파일이 있지만, 손상되었거나 버전을 알 수 없음; 무시함"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"추측된 pg_control 설정값들:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"현재 pg_control 설정값들:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_control 버전 번호: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "카탈로그 버전 번호: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "데이터베이스 시스템 식별자: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "마지막 체크포인트 TimeLineID: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "마지막 체크포인트 full_page_writes: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "off"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "on"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "마지막 체크포인트 NextXID: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "마지막 체크포인트 NextOID: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "마지막 체크포인트 NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "마지막 체크포인트 NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "마지막 체크포인트 제일 오래된 XID: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "마지막 체크포인트 제일 오래된 XID의 DB:%u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "마지막 체크포인트 제일 오래된 ActiveXID:%u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "마지막 체크포인트 제일 오래된 MultiXid:%u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "마지막 체크포인트 제일 오래된 MultiXid의 DB:%u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "마지막 체크포인트 제일 오래된 CommitTsXid:%u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "마지막 체크포인트 최신 CommitTsXid: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "최대 자료 정렬: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "데이터베이스 블록 크기: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "대형 릴레이션의 세그먼트당 블럭 갯수: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "WAL 블록 크기: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "WAL 세그먼트의 크기(byte): %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "식별자 최대 길이: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "인덱스에서 사용하는 최대 열 수: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "TOAST 청크의 최대 크기: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "대형객체 청크의 최대 크기: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "날짜/시간형 자료의 저장방식: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64-비트 정수"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Float8 인수 전달: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "참조별"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "값별"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "데이터 페이지 체크섬 버전: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"변경될 값:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "리셋 뒤 첫 로그 세그먼트: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMultiXid의 DB: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID의 DB: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID epoch: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "제일 오래된 CommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "최근 CommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "\"%s\" 디렉터리 열 수 없음: %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "\"%s\" 디렉터리를 읽을 수 없음: %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "\"%s\" 디렉터리를 닫을 수 없음: %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "\"%s\" 파일을 지울 수 없음: %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "\"%s\" 파일을 열 수 없음: %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "\"%s\" 파일 쓰기 실패: %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsync 오류: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 트랜잭션 로그를 다시 설정합니다.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"사용법:\n"
+" %s [옵션]... DATADIR\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "옵션들:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" 커밋 타임스탬프를 사용할 최소,최대 트랜잭"
+"션\n"
+" ID 값 (0이면 바꾸지 않음)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR 데이터 디렉터리\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH 다음 트랙잭션 ID epoch 지정\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force 강제로 갱신함\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid ""
+" -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr ""
+" -l, --next-wal-file=WALFILE 새 트랜잭션 로그를 위한 WAL 최소 시작 위치"
+"를 강제로 지정\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid ""
+" -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr ""
+" -m, --multixact-ids=MXID,MXID 다음 제일 오래된 멀티트랜잭션 ID 지정\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid ""
+" -n, --dry-run no update, just show what would be done\n"
+msgstr ""
+" -n, --dry-run 갱신하지 않음, 컨트롤 값들을 보여주기만 함"
+"(테스트용)\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID 다음 OID 지정\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET 다음 멀티트랜잭션 옵셋 지정\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid ""
+" -V, --version output version information, then exit\n"
+msgstr " -V, --version 버전 정보를 보여주고 마침\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID 다음 트랜잭션 ID 지정\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=SIZE WAL 조각 파일 크기, MB 단위\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 이 도움말을 보여주고 마침\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"문제점 보고 주소: <%s>\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 홈페이지: <%s>\n"
diff --git a/src/bin/pg_resetwal/po/pt_BR.po b/src/bin/pg_resetwal/po/pt_BR.po
new file mode 100644
index 0000000..1809d39
--- /dev/null
+++ b/src/bin/pg_resetwal/po/pt_BR.po
@@ -0,0 +1,651 @@
+# Brazilian Portuguese message translation file for pg_resetwal
+#
+# Copyright (C) 2002-2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Cesar Suga <sartre@linuxbr.com>, 2002.
+# Roberto Mello <rmello@fslc.usu.edu>, 2002.
+# Euler Taveira <euler@eulerto.com>, 2003-2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-05-09 12:02-0300\n"
+"PO-Revision-Date: 2005-10-04 22:55-0300\n"
+"Last-Translator: Euler Taveira <euler@eulerto.com>\n"
+"Language-Team: Brazilian Portuguese <pgsql-translators@postgresql.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n>1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "erro: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "aviso: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "não pôde carregar biblioteca \"%s\": código de erro %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "não pode criar informações restritas nessa plataforma: código de erro %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "não pôde abrir informação sobre processo: código de erro %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "não pôde alocar SIDs: código de erro %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "não pôde criar informação restrita: código de erro %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "não pôde iniciar processo para comando \"%s\": código de erro %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "não pôde executar novamente com token restrito: código de erro %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "não pôde obter código de saída de subprocesso: código de erro %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "argumento inválido para opção %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Tente \"%s --help\" para obter informações adicionais.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "época do ID da transação (-e) não deve ser -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "ID da transação (-x) não deve ser 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "ID de transação (-c) deve ser 0 ou maior ou igual a 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) não deve ser 0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "ID de transação múltipla (-m) não deve ser 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "ID de transação múltipla mais antigo (-m) não deve ser 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "posição da transação múltipla (-O) não deve ser -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "argumento de --wal-segsize deve ser um número"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "argumento de --wal-segsize deve ser uma potência de 2 entre 1 e 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "muitos argumentos de linha de comando (primeiro é \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "nenhum diretório de dados especificado"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "não pode ser executado como \"root\""
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Você deve executar %s como um super-usuário do PostgreSQL."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "não pôde ler permissões do diretório \"%s\": %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "não pôde mudar diretório para \"%s\": %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "não pôde abrir arquivo \"%s\" para leitura: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "arquivo de bloqueio \"%s\" existe"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "O servidor está executando? Se não, remova o arquivo de bloqueio e tente novamente."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Se estes valores lhe parecem aceitáveis, use -f para forçar o reinício.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"O servidor de banco de dados não foi desligado corretamente.\n"
+"Reiniciar o log de transação pode causar perda de dados.\n"
+"Se você quer continuar mesmo assim, use -f para forçar o reinício.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Reinício do log de transação\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "arquivo vazio \"%s\" inesperado"
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "não pôde ler arquivo \"%s\": %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "diretório de dados é de versão incorreta"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Arquivo \"%s\" contém \"%s\", que não é compatível com esta versão do programa \"%s\"."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Se você tem certeza que o caminho do diretório de dados está correto, execute\n"
+" touch %s\n"
+"e tente novamente."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control existe mas tem CRC inválido; prossiga com cuidado"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control especifica tamanho de segmento do WAL inválido (%d byte); prossiga com cuidado"
+msgstr[1] "pg_control especifica tamanho de segmento do WAL inválido (%d bytes); prossiga com cuidado"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control existe mas não funciona ou sua versão é desconhecida; ignorando-o"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Valores supostos do pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Valores atuais do pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "número da versão do pg_control: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Número da versão do catálogo: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Identificador do sistema de banco de dados: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "TimeLineID do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "full_page_writes do último ponto de controle: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "desabilitado"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "habilitado"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID do último ponto de controle: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "NextOID do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "BD do oldestXID do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "BD do oldestMulti do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid do último ponto de controle: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Máximo alinhamento de dado: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Tamanho do bloco do banco de dados: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Blocos por segmento da relação grande: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Tamanho do bloco do WAL: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Bytes por segmento do WAL: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Tamanho máximo de identificadores: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Máximo de colunas em um índice: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Tamanho máximo do bloco TOAST: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Tamanho do bloco de um objeto grande: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Tipo de data/hora do repositório: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "inteiros de 64 bits"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Passagem de argumento float8: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "por referência"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "por valor"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Versão da verificação de páginas de dados: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Valores a serem alterados:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Primeiro segmento do arquivo de log após reinício: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "BD do OldestMulti: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "BD do OldestXID: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "época do NextXID: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "não pôde abrir diretório \"%s\": %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "não pôde ler diretório \"%s\": %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "não pôde fechar diretório \"%s\": %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "não pôde excluir arquivo \"%s\": %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "não pôde abrir arquivo \"%s\": %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "não pôde escrever no arquivo \"%s\": %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "erro ao executar fsync: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s reinicia o log de transação do PostgreSQL.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Uso:\n"
+" %s [OPÇÃO]... DIRDADOS\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Opções:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" define os IDs de transação mais antigo e mais novo\n"
+" timestamp de efetivação (zero significa nenhuma mudança)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DIRDADOS diretório de dados\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=ÉPOCA_XID define próxima época do ID de transação\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force força atualização ser feita\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=ARQUIVOWAL define local inicial mínimo do WAL para novo log de transação\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID define próximo e mais velho ID de transação múltipla\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run sem atualização, mostra o que seria feito\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID define próximo OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=POSIÇÃO define próxima posição de transação múltipla\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostra informação sobre a versão e termina\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID define próximo ID de transação\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=TAMANHO tamanho dos segmentos do WAL, em megabytes\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostra essa ajuda e termina\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Relate erros a <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "página web do %s: <%s>\n"
diff --git a/src/bin/pg_resetwal/po/ru.po b/src/bin/pg_resetwal/po/ru.po
new file mode 100644
index 0000000..d0f196d
--- /dev/null
+++ b/src/bin/pg_resetwal/po/ru.po
@@ -0,0 +1,761 @@
+# Russian message translation file for pg_resetxlog
+# Copyright (C) 2002-2016 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Serguei A. Mokhov <mokhov@cs.concordia.ca>, 2002-2005.
+# Oleg Bartunov <oleg@sai.msu.su>, 2004.
+# Sergey Burladyan <eshkinkot@gmail.com>, 2009.
+# Dmitriy Olshevskiy <olshevskiy87@bk.ru>, 2014.
+# Alexander Lakhin <exclusion@gmail.com>, 2012-2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetxlog (PostgreSQL current)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-09-03 11:22+0300\n"
+"PO-Revision-Date: 2020-09-03 13:37+0300\n"
+"Last-Translator: Alexander Lakhin <exclusion@gmail.com>\n"
+"Language-Team: Russian <pgsql-ru-general@postgresql.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "важно: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "ошибка: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "предупреждение: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "не удалось загрузить библиотеку \"%s\" (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "в этой ОС нельзя создавать ограниченные маркеры (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "не удалось открыть маркер процесса (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "не удалось подготовить структуры SID (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "не удалось создать ограниченный маркер (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "не удалось запустить процесс для команды \"%s\" (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "не удалось перезапуститься с ограниченным маркером (код ошибки: %lu)"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "не удалось получить код выхода от подпроцесса (код ошибки: %lu)"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "недопустимый аргумент параметра %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Для дополнительной информации попробуйте \"%s --help\".\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "эпоха ID транзакции (-e) не должна быть равна -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "ID транзакции (-x) не должен быть равен 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "ID транзакции (-c) должен быть равен 0, либо больше или равен 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) не должен быть равен 0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "ID мультитранзакции (-m) не должен быть равен 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "ID старейшей мультитранзакции (-m) не должен быть равен 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "смещение мультитранзакции (-O) не должно быть равно -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "аргументом --wal-segsize должно быть число"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "аргументом --wal-segsize должна быть степень 2 от 1 до 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "слишком много аргументов командной строки (первый: \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "каталог данных не указан"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "программу не должен запускать root"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Запускать %s нужно от имени суперпользователя PostgreSQL."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "не удалось считать права на каталог \"%s\": %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "не удалось перейти в каталог \"%s\": %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "не удалось открыть файл \"%s\" для чтения: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "файл блокировки \"%s\" существует"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr ""
+"Возможно, сервер запущен? Если нет, удалите этот файл и попробуйте снова."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Если эти значения приемлемы, выполните сброс принудительно, добавив ключ -"
+"f.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Сервер баз данных был остановлен некорректно.\n"
+"Сброс журнала предзаписи может привести к потере данных.\n"
+"Если вы хотите сбросить его, несмотря на это, добавьте ключ -f.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Журнал предзаписи сброшен\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "файл \"%s\" оказался пустым"
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "не удалось прочитать файл \"%s\": %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "каталог данных имеет неверную версию"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid ""
+"File \"%s\" contains \"%s\", which is not compatible with this program's "
+"version \"%s\"."
+msgstr ""
+"Файл \"%s\" содержит строку \"%s\", а ожидается версия программы \"%s\"."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Если вы уверены, что путь к каталогу данных правильный, выполните\n"
+" touch %s\n"
+"и повторите попытку."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr ""
+"pg_control существует, но его контрольная сумма неверна; продолжайте с "
+"осторожностью"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid ""
+"pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural ""
+"pg_control specifies invalid WAL segment size (%d bytes); proceed with "
+"caution"
+msgstr[0] ""
+"в pg_control указан некорректный размер сегмента WAL (%d Б); продолжайте с "
+"осторожностью"
+msgstr[1] ""
+"в pg_control указан некорректный размер сегмента WAL (%d Б); продолжайте с "
+"осторожностью"
+msgstr[2] ""
+"в pg_control указан некорректный размер сегмента WAL (%d Б); продолжайте с "
+"осторожностью"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr ""
+"pg_control испорчен или имеет неизвестную либо недопустимую версию; "
+"игнорируется..."
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Предполагаемые значения pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Текущие значения pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "Номер версии pg_control: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Номер версии каталога: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Идентификатор системы баз данных: %llu\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "Линия времени последней конт. точки: %u\n"
+
+# skip-rule: no-space-after-period
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Режим full_page_writes последней к.т: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "выкл."
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "вкл."
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID последней конт. точки: %u:%u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "NextOID последней конт. точки: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId послед. конт. точки: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset послед. конт. точки: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID последней конт. точки: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "БД с oldestXID последней конт. точки: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID последней к. т.: %u\n"
+
+# skip-rule: capital-letter-first
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid последней конт. точки: %u\n"
+
+# skip-rule: capital-letter-first, double-space
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "БД с oldestMulti последней к. т.: %u\n"
+
+# skip-rule: capital-letter-first, double-space
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid последней к. т.: %u\n"
+
+# skip-rule: capital-letter-first, double-space
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid последней к. т.: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Макс. предел выравнивания данных: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Размер блока БД: %u\n"
+
+# skip-rule: double-space
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Блоков в макс. сегменте отношений: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Размер блока WAL: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Байт в сегменте WAL: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Максимальная длина идентификаторов: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Максимальное число столбцов в индексе: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Максимальный размер порции TOAST: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Размер порции большого объекта: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Формат хранения даты/времени: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64-битные целые"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Передача аргумента Float8: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "по ссылке"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "по значению"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Версия контрольных сумм страниц: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Значения, которые будут изменены:\n"
+"\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Первый сегмент журнала после сброса: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "БД с oldestMultiXid: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "БД с oldestXID: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "Эпоха NextXID: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "не удалось открыть каталог \"%s\": %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "не удалось прочитать каталог \"%s\": %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "не удалось закрыть каталог \"%s\": %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "ошибка при удалении файла \"%s\": %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "не удалось открыть файл \"%s\": %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "не удалось записать файл \"%s\": %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "ошибка синхронизации с ФС: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s сбрасывает журнал предзаписи PostgreSQL.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Использование:\n"
+" %s [ПАРАМЕТР]... КАТ_ДАННЫХ\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Параметры:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" задать старейшую и новейшую транзакции,\n"
+" несущие метки времени (0 — не менять)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]КАТ_ДАННЫХ каталог данных\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr ""
+" -e, --epoch=XIDEPOCH задать эпоху для ID следующей транзакции\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force принудительное выполнение операции\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid ""
+" -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr ""
+" -l, --next-wal-file=ФАЙЛ_WAL задать минимальное начальное положение\n"
+" для нового WAL\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid ""
+" -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr ""
+" -m, --multixact-ids=MXID,MXID задать ID следующей и старейшей "
+"мультитранзакции\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid ""
+" -n, --dry-run no update, just show what would be done\n"
+msgstr ""
+" -n, --dry-run показать, какие действия будут выполнены,\n"
+" но не выполнять их\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID задать следующий OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr ""
+" -O, --multixact-offset=СМЕЩЕНИЕ задать смещение следующей "
+"мультитранзакции\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid ""
+" -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID задать ID следующей транзакции\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=РАЗМЕР размер сегментов WAL (в мегабайтах)\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Об ошибках сообщайте по адресу <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Домашняя страница %s: <%s>\n"
+
+#~ msgid "Float4 argument passing: %s\n"
+#~ msgstr "Передача аргумента Float4: %s\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Об ошибках сообщайте по адресу <pgsql-bugs@lists.postgresql.org>.\n"
+
+#~ msgid "%s: could not create pg_control file: %s\n"
+#~ msgstr "%s: не удалось создать файл pg_control: %s\n"
+
+#~ msgid "%s: could not write pg_control file: %s\n"
+#~ msgstr "%s: не удалось записать файл pg_control: %s\n"
+
+#~ msgid ""
+#~ " -c XID,XID set oldest and newest transactions bearing commit "
+#~ "timestamp\n"
+#~ msgstr ""
+#~ " -c XID,XID задать старейшую и новейшую транзакции, несущие метку "
+#~ "времени фиксации\n"
+
+#~ msgid " (zero in either value means no change)\n"
+#~ msgstr " (0 в любом из аргументов игнорируется)\n"
+
+#~ msgid ""
+#~ "%s: internal error -- sizeof(ControlFileData) is too large ... fix "
+#~ "PG_CONTROL_SIZE\n"
+#~ msgstr ""
+#~ "%s: внутренняя ошибка -- размер ControlFileData слишком велик -- "
+#~ "исправьте PG_CONTROL_SIZE\n"
+
+#~ msgid "floating-point numbers"
+#~ msgstr "числа с плавающей точкой"
+
+#~ msgid "%s: invalid argument for option -x\n"
+#~ msgstr "%s: недопустимый аргумент параметра -x\n"
+
+#~ msgid "%s: invalid argument for option -o\n"
+#~ msgstr "%s: недопустимый аргумент параметра -o\n"
+
+#~ msgid "%s: invalid argument for option -m\n"
+#~ msgstr "%s: недопустимый аргумент параметра -m\n"
+
+#~ msgid "%s: invalid argument for option -O\n"
+#~ msgstr "%s: недопустимый аргумент параметра -O\n"
+
+#~ msgid "%s: invalid argument for option -l\n"
+#~ msgstr "%s: недопустимый аргумент параметра -l\n"
+
+#~ msgid " -m XID,OLDEST set next multitransaction ID and oldest value\n"
+#~ msgstr ""
+#~ " -m XID,СТАРЕЙШАЯ задать ID следующей мультитранзакции и ID старейшей\n"
+
+#~ msgid "disabled"
+#~ msgstr "отключен"
+
+#~ msgid "enabled"
+#~ msgstr "включен"
+
+#~ msgid "First log file ID after reset: %u\n"
+#~ msgstr "ID первого журнала после сброса: %u\n"
diff --git a/src/bin/pg_resetwal/po/sv.po b/src/bin/pg_resetwal/po/sv.po
new file mode 100644
index 0000000..74d07a3
--- /dev/null
+++ b/src/bin/pg_resetwal/po/sv.po
@@ -0,0 +1,657 @@
+# Swedish message translation file for resetxlog.
+# Dennis Björklund <db@zigo.dhs.org>, 2002, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020.
+# Peter Eisentraut <peter_e@gmx.net>, 2010.
+# Mats Erik Andersson <bsd@gisladisker.se>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-04-13 16:46+0000\n"
+"PO-Revision-Date: 2020-04-13 23:40+0200\n"
+"Last-Translator: Dennis Björklund <db@zigo.dhs.org>\n"
+"Language-Team: Swedish <pgsql-translators@postgresql.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatalt: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "fel: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "varning: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "kunde inte ladda länkbibliotek \"%s\": felkod %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "kan inte skapa token för begränsad åtkomst på denna plattorm: felkod %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "kunde inte öppna process-token: felkod %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "kunde inte allokera SID: felkod %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "kunde inte skapa token för begränsad åtkomst: felkod %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "kunde inte starta process för kommando \"%s\": felkod %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "kunde inte köra igen med token för begränsad åtkomst: felkod %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "kunde inte hämta statuskod för underprocess: felkod %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "ogiltigt argument för flaggan %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Försök med \"%s --help\" för mer information.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "Epoch (-e) för transaktions-ID får inte vara -1."
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "Transaktions-ID (-x) får inte vara 0."
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "transaktions-ID (-c) måste antingen vara 0 eller större än eller lika med 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) får inte vara 0."
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "Multitransaktions-ID (-m) får inte vara 0."
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "Äldsta multitransaktions-ID (-m) får inte vara 0."
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "Multitransaktionsoffset (-O) får inte vara -1."
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "argumentet till --wal-segsize måste vara ett tal"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "argumentet till --wal-segsize måste vara en tvåpotens mellan 1 och 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "för många kommandoradsargument (första är \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "ingen datakatalog angiven"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "kan inte köras av \"root\""
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Du måste köra %s som PostgreSQL:s superanvändare."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "kunde inte läsa rättigheter på katalog \"%s\": %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "kunde inte byta katalog till \"%s\": %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "kunde inte öppna filen \"%s\" för läsning: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "låsfil med namn \"%s\" finns redan"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Kör servern redan? Om inte, radera låsfilen och försök igen."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Om dessa värden verkar godtagbara, använd då -f för att\n"
+"framtvinga återställning.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Databasservern stängdes inte av ordentligt. Att återställa\n"
+"write-ahead-loggen kan medföra att data förloras. Om du ändå\n"
+"vill fortsätta, använd -f för att framtvinga återställning.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Återställning av write-ahead-log\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "oväntad tom fil \"%s\""
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "kunde inte läsa fil \"%s\": %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "datakatalogen har fel version"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Filen \"%s\" innehåller \"%s\", vilket inte är kompatibelt med detta programmets version \"%s\"."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Om du är säker på att sökvägen till datakatalogen är riktig,\n"
+"utför då \"touch %s\" och försök sedan igen."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control existerar men har ogiltig CRC. Fortsätt med varsamhet."
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control anger ogiltig WAL-segmentstorlek (%d byte); fortsätt med varsamhet."
+msgstr[1] "pg_control anger ogiltig WAL-segmentstorlek (%d byte); fortsätt med varsamhet."
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control existerar men är trasig eller har fel version. Den ignoreras."
+
+#: pg_resetwal.c:744
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Gissade värden för pg_control:\n"
+"\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Nuvarande värden för pg_control:\n"
+"\n"
+
+# November 26th, 2014: Insert six additional space characters
+# for best alignment with Swedish translation.
+# Translations should be checked against those of pg_controldata.
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "Versionsnummer för pg_control: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Katalogversion: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Databasens systemidentifierare: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "TimeLineID vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Senaste kontrollpunktens full_page_writes: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "av"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "på"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "NextXID vid senaste kontrollpunkt: %u:%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "NextOID vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "NextMultiXactId vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "NextMultiOffset vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "oldestXID vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "DB för oldestXID vid senaste kontrollpunkt: %u\n"
+
+# FIXME: too wide
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "oldestActiveXID vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "oldestMultiXid vid senaste kontrollpunkt: %u\n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "DB för oldestMulti vid senaste kontrollpkt: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "oldestCommitTsXid vid senaste kontrollpunkt:%u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "newestCommitTsXid vid senaste kontrollpunkt:%u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Maximal jämkning av data (alignment): %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Databasens blockstorlek: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Block per segment i en stor relation: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Blockstorlek i transaktionsloggen: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Segmentstorlek i transaktionsloggen: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Maximal längd för identifierare: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Maximalt antal kolonner i ett index: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Maximal storlek för en TOAST-enhet: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Storlek för large-object-enheter: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Representation av dag och tid: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64-bitars heltal"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Åtkomst till float8-argument: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "referens"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "värdeåtkomst"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Checksummaversion för datasidor: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Värden att förändra:\n"
+"\n"
+
+# November 26th, 2014: Insert additional spacing to fit
+# with the first translated text, which uses most characters.
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Första loggsegment efter återställning: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "DB för OldestMulti: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "DB för OldestXID: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "Epoch för NextXID: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "kunde inte öppna katalog \"%s\": %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "kunde inte läsa katalog \"%s\": %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "kunde inte stänga katalog \"%s\": %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "kunde inte radera fil \"%s\": %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "kunde inte öppna fil \"%s\": %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "kunde inte skriva fil \"%s\": %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "misslyckad fsync: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s återställer write-ahead-log för PostgreSQL.\n"
+"\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Användning:\n"
+" %s [FLAGGA]... DATAKATALOG\n"
+"\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Flaggor:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" sätt äldsta och nyaste transaktionerna som\n"
+" kan ha commit-tidstämpel (noll betyder\n"
+" ingen ändring)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR datakatalog\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH sätter epoch för nästa transaktions-ID\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force framtvinga uppdatering\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFIL sätt minsta startposition för ny WAL\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID sätt nästa och äldsta multitransaktions-ID\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run ingen updatering; visa bara planerade åtgärder\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID sätt nästa OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET sätt nästa multitransaktionsoffset\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version skriv ut versioninformation och avsluta sedan\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID sätt nästa transaktions-ID\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=STORLEK storlek på WAL-segment i megabyte\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp och avsluta sedan\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapportera fel till <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "hemsida för %s: <%s>\n"
+
+#~ msgid "could not load advapi32.dll: error code %lu"
+#~ msgstr "kunde inte ladda advapi32.dll: felkod %lu"
diff --git a/src/bin/pg_resetwal/po/tr.po b/src/bin/pg_resetwal/po/tr.po
new file mode 100644
index 0000000..48b1497
--- /dev/null
+++ b/src/bin/pg_resetwal/po/tr.po
@@ -0,0 +1,751 @@
+# translation of pg_resetxlog-tr.po to Turkish
+# Devrim GUNDUZ <devrim@CommandPrompt.com>, 2004, 2005, 2006, 2007.
+# Nicolai TUFAR <ntufar@gmail.com>, 2004, 2005, 2006, 2007.
+# Abdullah GÜLNER <agulner@gmail.com>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetxlog-tr\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-04-26 13:47+0000\n"
+"PO-Revision-Date: 2019-06-12 16:23+0300\n"
+"Last-Translator: Abdullah GÜLNER\n"
+"Language-Team: Turkish <ceviri@postgresql.org.tr>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"X-Poedit-Basepath: /home/ntufar/pg/pgsql/src/bin/pg_resetxlog\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/fe_utils/logging.c:182
+#, c-format
+msgid "fatal: "
+msgstr "ölümcül (fatal): "
+
+#: ../../../src/fe_utils/logging.c:189
+#, c-format
+msgid "error: "
+msgstr "hata: "
+
+#: ../../../src/fe_utils/logging.c:196
+#, c-format
+msgid "warning: "
+msgstr "uyarı: "
+
+#: ../../common/restricted_token.c:69
+#, c-format
+msgid "cannot create restricted tokens on this platform"
+msgstr "bu platformda restricted token oluşturulamıyor"
+
+#: ../../common/restricted_token.c:78
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "process token açma başarısız: hata kodu %lu"
+
+#: ../../common/restricted_token.c:91
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "SIDler ayrılamıyor (allocate): Hata kodu %lu"
+
+#: ../../common/restricted_token.c:110
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "restricted token oluşturulamıyor: hata kodu %lu"
+
+#: ../../common/restricted_token.c:131
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "\"%s\" komutu için işlem (process) başlatılamadı: hata kodu %lu"
+
+#: ../../common/restricted_token.c:169
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "restricted token ile tekrar çalıştırılamadı (re-execute): hata kodu %lu"
+
+#: ../../common/restricted_token.c:185
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "alt-işlemden çıkış kodu alınamadı: hata kodu %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "%s seçeneği için geçersiz argüman"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Daha fazla bilgi için \"%s --help\" yazabilirsiniz.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "transaction ID epoch (-e) -1 olamaz"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "transaction ID (-x) 0 olamaz"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "işlem (transaction) ID (-c) ya 0 ya da 2 den büyük veya eşit olmalı"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) 0 olamaz"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "multitransaction ID (-m) 0 olamaz"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "en eski multitransaction ID (-m) 0 olamaz"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "multitransaction offset (-O) değeri -1 olamaz"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "--wal-segsize argümanı bir sayı olmalıdır"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "--wal-segsize argümanı 2'nin 1 ve 1024 arasındaki bir üssü olmalıdır"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "çok fazla komut satırı argümanı var (ilki \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "veri dizini belirtilmedi"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "\"root\" tarafından çalıştırılamaz"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "%s komutunu PostgreSQL superuser olarak çalıştırmalısınız."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "\"%s\" dizininin erişim haklarını okunamıyor: %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "çalışma dizini \"%s\" olarak değiştirilemedi: %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "\"%s\" dosyası, okunmak için açılamadı: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "\"%s\" lock dosyası mevcuttur"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Bir sunucu çalışıyor mu? Eğer çalışmıyorsa, lock dosyasını silin ve yeniden deneyin."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"Bu değerler uygun görünüyorsa, reset zorlamak için -f kullanın.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"Veritabanı sunucusu düzgün kapatılmadı.\n"
+"İşlem kayıt (write-ahead log) dosyasını sıfırlamak veri kaybına neden olabilir.\n"
+"Yine de devam etmek istiyorsanız, sıfırlama işlemini zorlamak için -f parametresini kullanınız.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Write-ahead log sıfırlama\n"
+
+#: pg_resetwal.c:554
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "beklenmeyen boş dosya \"%s\""
+
+#: pg_resetwal.c:556 pg_resetwal.c:618
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "\"%s\" dosyası okuma hatası: %m"
+
+#: pg_resetwal.c:571
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "veri dizininin sürümü yanlış"
+
+#: pg_resetwal.c:572
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "\"%s\" dosyası \"%s\" içermekte ki bu programın \"%s\" sürümüyle uyumlu değil."
+
+#: pg_resetwal.c:605
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"Eğer veri dizininin doğru olduğuna eminseniz\n"
+" touch %s\n"
+"komutunu çalıştırın ve tekrar deneyin."
+
+#: pg_resetwal.c:636
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control mevcut ancak geçersiz CRC'ye sahip, dikkatle ilerleyin"
+
+#: pg_resetwal.c:645
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control geçersiz WAL segment boyutu belirtmekte (%d bayt); dikkatle ilerleyin"
+msgstr[1] "pg_control geçersiz WAL segment boyutu belirtmekte (%d bayt); dikkatle ilerleyin"
+
+#: pg_resetwal.c:656
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control mevcut ama ya bozuk ya da yanlış sürümde; gözardı ediliyor"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"Tahmin edilen pg_control değerleri:\n"
+"\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"Geçerli pg_control değerleri:\n"
+"\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_control sürüm numarası: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Katalog sürüm numarası: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Database system identifier: %s\n"
+msgstr "Veritabanı sistem tanımlayıcısı: %s\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "Son checkpoint''in TimeLineID değeri: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Son checkpoint'in full_page_writes değeri: %s\n"
+
+#: pg_resetwal.c:774
+msgid "off"
+msgstr "kapalı"
+
+#: pg_resetwal.c:774
+msgid "on"
+msgstr "açık"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "Son checkpoint'in NextXID değeri: %u:%u\n"
+
+#: pg_resetwal.c:778
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "Son checkpoint''in NextOID değeri: %u\n"
+
+#: pg_resetwal.c:780
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "Son checkpoint''in NextMultiXactId değeri: %u\n"
+
+#: pg_resetwal.c:782
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "Son checkpoint''in NextMultiOffset değeri: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "Son checkpoint'in oldestXID değeri: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "Son checkpoint'in oldestXID değeri'nin DB'si: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "Son checkpoint'in oldestActiveXID değeri: %u\n"
+
+#: pg_resetwal.c:790
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "Son checkpoint'in oldestMultiXid değeri: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "Son checkpoint'in oldestMulti'sinin VT'si: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "Son checkpoint'in oldestCommitTsXid değeri: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "Son checkpoint''in newestCommitTsXid değeri: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Azami veri hizalama: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Veritabanı blok büyüklüğü: %u\n"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "büyük nesnenin bölümü başına blok sayısı: %u\n"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "WAL blok büyüklüğü: %u\n"
+
+#: pg_resetwal.c:807 pg_resetwal.c:895
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "WAL segment başına WAL bayt sayısı: %u\n"
+
+#: pg_resetwal.c:809
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Tanımlayıcıların en yüksek sayısı: %u\n"
+
+#: pg_resetwal.c:811
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Bir indexteki en fazla kolon sayısı: %u\n"
+
+#: pg_resetwal.c:813
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "TOAST parçasının en büyük uzunluğu: %u\n"
+
+#: pg_resetwal.c:815
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Büyük-nesne parçasının boyutu: %u\n"
+
+#: pg_resetwal.c:818
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Tarih/zaman tipi saklanması: %s\n"
+
+#: pg_resetwal.c:819
+msgid "64-bit integers"
+msgstr "64-bit tamsayılar"
+
+#: pg_resetwal.c:820
+#, c-format
+msgid "Float4 argument passing: %s\n"
+msgstr "Float4 argument passing: %s\n"
+
+#: pg_resetwal.c:821 pg_resetwal.c:823
+msgid "by reference"
+msgstr "referans ile"
+
+#: pg_resetwal.c:821 pg_resetwal.c:823
+msgid "by value"
+msgstr "değer ils"
+
+#: pg_resetwal.c:822
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Float8 argument passing: %s\n"
+
+#: pg_resetwal.c:824
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Veri sayfası sağlama (checksum) sürümü: %u\n"
+
+#: pg_resetwal.c:838
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"Değiştirilecek değerler:\n"
+"\n"
+
+#: pg_resetwal.c:842
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Sıfırlamadan sonraki ilk kayıt segmenti: %s\n"
+
+#: pg_resetwal.c:846
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId değeri: %u\n"
+
+#: pg_resetwal.c:848
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid değeri: %u\n"
+
+#: pg_resetwal.c:850
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMulti'nin VT'si: %u\n"
+
+#: pg_resetwal.c:856
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset değeri: %u\n"
+
+#: pg_resetwal.c:862
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID değeri: %u\n"
+
+#: pg_resetwal.c:868
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID değeri: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID değeri: %u\n"
+
+#: pg_resetwal.c:872
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID'nin VT'si: %u\n"
+
+#: pg_resetwal.c:878
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID devri: %u\n"
+
+#: pg_resetwal.c:884
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid değeri: %u\n"
+
+#: pg_resetwal.c:889
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid değeri: %u\n"
+
+#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "\"%s\" dizini açılamıyor: %m"
+
+#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "\"%s\" dizini okunamıyor: %m"
+
+#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "\"%s\" dizini kapatılamadı: %m"
+
+#: pg_resetwal.c:1055 pg_resetwal.c:1105
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "\"%s\" dosyası silinemedi: %m"
+
+#: pg_resetwal.c:1186
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "\"%s\" dosyası açılamıyor: %m"
+
+#: pg_resetwal.c:1196 pg_resetwal.c:1209
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "\"%s\" dosyasına yazma hatası: %m"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsync hatası: %m"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr ""
+"%s PostgreSQL işlem kayıt (write-ahead log) dosyasını sıfırlar.\n"
+"\n"
+
+#: pg_resetwal.c:1228
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"Kullanımı:\n"
+" %s [SEÇENEK]... VERİ_DİZİNİ\n"
+"\n"
+
+#: pg_resetwal.c:1229
+#, c-format
+msgid "Options:\n"
+msgstr "Seçenekler:\n"
+
+#: pg_resetwal.c:1230
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" commit timestamp taşıyan en eski ve en yeni\n"
+" işlemleri (transaction) ayarla (sıfır, değişiklik yok demek)\n"
+
+#: pg_resetwal.c:1233
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR veri dizini\n"
+
+#: pg_resetwal.c:1234
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH sonraki transaction ID epoch ayarla\n"
+
+#: pg_resetwal.c:1235
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force güncellemenin yapılmasını zorla\n"
+
+#: pg_resetwal.c:1236
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFILE yeni WAL için en düşük başlama yerini ayarla\n"
+
+#: pg_resetwal.c:1237
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID sonraki ve en eski multitransaction ID'sini ayarla\n"
+
+#: pg_resetwal.c:1238
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run güncelleme yok, sadece ne yapılacağını göster\n"
+
+#: pg_resetwal.c:1239
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID sonraki OID'i ayarla\n"
+
+#: pg_resetwal.c:1240
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET sonraki multitransaction offseti ayarla\n"
+
+#: pg_resetwal.c:1241
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version sürüm bilgisini göster, sonra çık\n"
+
+#: pg_resetwal.c:1242
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID sonraki işlem (transaction) ID ayarla\n"
+
+#: pg_resetwal.c:1243
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=SIZE WAL segmentlerinin boyutu, megabayt olarak\n"
+
+#: pg_resetwal.c:1244
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help bu yardımı göster, sonra çık\n"
+
+#: pg_resetwal.c:1245
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+msgstr ""
+"\n"
+"Hataları <pgsql-bugs@lists.postgresql.org> adresine bildiriniz.\n"
+
+#~ msgid " -c XID,XID set oldest and newest transactions bearing commit timestamp\n"
+#~ msgstr " -c XID,XID commit timestamp taşıyan en eski ve enyeni işlemleri (transaction) ayarla\n"
+
+#~ msgid " (zero in either value means no change)\n"
+#~ msgstr ""
+#~ " (her iki değerde sıfır değişiklik olmadığı anlamına gelir)\n"
+#~ "\n"
+
+#~ msgid " [-D] DATADIR data directory\n"
+#~ msgstr " [-D] DATADIR veri dizini\n"
+
+#~ msgid " -V, --version output version information, then exit\n"
+#~ msgstr " -V,--version sürüm numarasını yaz ve çık\n"
+
+#~ msgid " -x XID set next transaction ID\n"
+#~ msgstr " -x XID sıradaki transaction ID'sini ayarla\n"
+
+#~ msgid " -?, --help show this help, then exit\n"
+#~ msgstr " -?, --help bu yardımı göster ve çık\n"
+
+#~ msgid "Maximum length of locale name: %u\n"
+#~ msgstr "Yerel adının en büyük uzunluğu: %u\n"
+
+#~ msgid "%s: invalid LC_CTYPE setting\n"
+#~ msgstr "%s: geçersiz LC_CTYPE ayarı\n"
+
+#~ msgid "%s: invalid LC_COLLATE setting\n"
+#~ msgstr "%s: Geçersiz LC_COLLATE ayarı\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version sürüm bilgisini göster ve çık\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help bu yardımı göster ve çık\n"
+
+#~ msgid "%s: could not read from directory \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizini okunamadı: %s\n"
+
+#~ msgid "%s: internal error -- sizeof(ControlFileData) is too large ... fix PG_CONTROL_SIZE\n"
+#~ msgstr "%s: iç hata -- sizeof(ControlFileData) çok büyük ... PG_CONTROL_SIZE değerini düzeltiniz\n"
+
+#~ msgid "floating-point numbers"
+#~ msgstr "kayan nokta sayılar"
+
+#~ msgid "First log file ID after reset: %u\n"
+#~ msgstr "Sıfırlamadan sonraki ilk kayıt dosyası ID'si: %u\n"
+
+#~ msgid "Transaction log reset\n"
+#~ msgstr "Transaction kayıt dosyası sıfırlandı\n"
+
+#~ msgid "%s: invalid argument for option -l\n"
+#~ msgstr "%s: -l seçeneği için geçersiz argüman\n"
+
+#~ msgid "%s: invalid argument for option -O\n"
+#~ msgstr "%s: -O seçeneği için geçersiz argüman\n"
+
+#~ msgid "%s: invalid argument for option -m\n"
+#~ msgstr "%s: -m seçeneği için geçersiz argüman\n"
+
+#~ msgid "%s: invalid argument for option -o\n"
+#~ msgstr "%s: -o seçeneği için geçersiz argüman\n"
+
+#~ msgid "%s: invalid argument for option -x\n"
+#~ msgstr "%s: -x seçeneği için geçersiz argüman\n"
+
+#~ msgid "%s: could not write file \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dosyasına yazılamadı: %s\n"
+
+#~ msgid "%s: could not open file \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dosyası açılamadı: %s\n"
+
+#~ msgid "%s: could not delete file \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dosyası silinemedi: %s\n"
+
+#~ msgid "%s: could not close directory \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizini kapatılamadı: %s\n"
+
+#~ msgid "%s: could not read directory \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizini okunamadı: %s\n"
+
+#~ msgid "%s: could not open directory \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizini açılamadı: %s\n"
+
+#~ msgid "%s: could not write pg_control file: %s\n"
+#~ msgstr "%s: pg_control dosyasına yazılamadı: %s\n"
+
+#~ msgid "%s: could not create pg_control file: %s\n"
+#~ msgstr "%s: pg_control dosyası yaratılamadı: %s\n"
+
+#~ msgid "%s: could not read file \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dosyası okunamadı: %s\n"
+
+#~ msgid "%s: could not open file \"%s\" for reading: %s\n"
+#~ msgstr "%s: \"%s\" dosyası okunmak için açılamadı: %s\n"
+
+#~ msgid "%s: could not change directory to \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizine geçilemedi: %s\n"
+
+#~ msgid "%s: could not read permissions of directory \"%s\": %s\n"
+#~ msgstr "%s: \"%s\" dizininin erişim hakları okunamadı : %s\n"
+
+#~ msgid "%s: cannot be executed by \"root\"\n"
+#~ msgstr "%s: \"root\" tarafından çalıştırılamaz\n"
+
+#~ msgid "%s: could not open process token: error code %lu\n"
+#~ msgstr "%s: process token açma başarısız: hata kodu %lu\n"
diff --git a/src/bin/pg_resetwal/po/uk.po b/src/bin/pg_resetwal/po/uk.po
new file mode 100644
index 0000000..b6c024e
--- /dev/null
+++ b/src/bin/pg_resetwal/po/uk.po
@@ -0,0 +1,618 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: postgresql\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-09-21 21:16+0000\n"
+"PO-Revision-Date: 2020-09-22 13:43\n"
+"Last-Translator: \n"
+"Language-Team: Ukrainian\n"
+"Language: uk_UA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
+"X-Crowdin-Project: postgresql\n"
+"X-Crowdin-Project-ID: 324573\n"
+"X-Crowdin-Language: uk\n"
+"X-Crowdin-File: /DEV_13/pg_resetwal.pot\n"
+"X-Crowdin-File-ID: 502\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "збій: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "помилка: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "попередження: "
+
+#: ../../common/restricted_token.c:64
+#, c-format
+msgid "could not load library \"%s\": error code %lu"
+msgstr "не вдалося завантажити бібліотеку \"%s\": код помилки %lu"
+
+#: ../../common/restricted_token.c:73
+#, c-format
+msgid "cannot create restricted tokens on this platform: error code %lu"
+msgstr "не вдалося створити обмежені токени на цій платформі: код помилки %lu"
+
+#: ../../common/restricted_token.c:82
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "не вдалося відкрити токен процесу: код помилки %lu"
+
+#: ../../common/restricted_token.c:97
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "не вдалося виділити SID: код помилки %lu"
+
+#: ../../common/restricted_token.c:119
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "не вдалося створити обмежений токен: код помилки %lu"
+
+#: ../../common/restricted_token.c:140
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "не вдалося запустити процес для команди \"%s\": код помилки %lu"
+
+#: ../../common/restricted_token.c:178
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "не вдалося перезапустити з обмеженим токеном: код помилки %lu"
+
+#: ../../common/restricted_token.c:194
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "не вдалося отримати код завершення підпроцесу: код помилки %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "неприпустимий аргумент для параметру %s"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Спробуйте \"%s --help\" для отримання додаткової інформації.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "епоха ID транзакції (-e) не повинна бути -1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "ID транзакції (-x) не повинна бути 0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "ID транзакції (-c) повинен дорівнювати 0, бути більшим за або дорівнювати 2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o) не може бути 0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "ID мультитранзакції (-m) не повинен бути 0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "найстарший ID мультитранзакції (-m) не повинен бути 0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "зсув мультитранзакції (-O) не повинен бути -1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "аргумент --wal-segsize повинен бути числом"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "аргумент --wal-segsize повинен бути ступенем 2 між 1 і 1024"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "забагато аргументів у командному рядку (перший \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "каталог даних не вказано"
+
+#: pg_resetwal.c:344
+#, c-format
+msgid "cannot be executed by \"root\""
+msgstr "\"root\" не може це виконувати"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "Запускати %s треба від суперкористувача PostgreSQL."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "не вдалося прочитати дозволи на каталог \"%s\": %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "не вдалося змінити каталог на \"%s\": %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:544 pg_resetwal.c:595
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "не вдалося відкрити файл \"%s\" для читання: %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "файл блокування \"%s\" вже існує"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "Чи запущений сервер? Якщо ні, видаліть файл блокування і спробуйте знову."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid "\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr "\n"
+"Якщо ці значення виглядають допустимими, використайте -f, щоб провести перевстановлення.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid "The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr "Сервер баз даних був зупинений некоректно.\n"
+"Очищення журналу передзапису може привести до втрати даних.\n"
+"Якщо ви все одно хочете продовжити, використайте параметр -f.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "Журнал передзапису скинуто\n"
+
+#: pg_resetwal.c:553
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "неочікуваний порожній файл \"%s\""
+
+#: pg_resetwal.c:555 pg_resetwal.c:611
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "не вдалося прочитати файл \"%s\": %m"
+
+#: pg_resetwal.c:564
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "каталог даних неправильної версії"
+
+#: pg_resetwal.c:565
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "Файл \"%s\" містить \"%s\", який не сумісний з версією цієї програми \"%s\"."
+
+#: pg_resetwal.c:598
+#, c-format
+msgid "If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr "Якщо Ви впевнені, що шлях каталогу даних є правильним, виконайте \n"
+" touch %s\n"
+"і спробуйте знову."
+
+#: pg_resetwal.c:629
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control існує, але має недопустимий CRC; продовжуйте з обережністю"
+
+#: pg_resetwal.c:638
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control вказує неприпустимий розмір сегмента WAL (%d байт); продовжуйте з обережністю"
+msgstr[1] "pg_control вказує неприпустимий розмір сегмента WAL (%d байти); продовжуйте з обережністю"
+msgstr[2] "pg_control вказує неприпустимий розмір сегмента WAL (%d байтів); продовжуйте з обережністю"
+msgstr[3] "pg_control вказує неприпустимий розмір сегмента WAL (%d байтів); продовжуйте з обережністю"
+
+#: pg_resetwal.c:649
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control існує, але зламаний або неправильної версії; ігнорується"
+
+#: pg_resetwal.c:744
+#, c-format
+msgid "Guessed pg_control values:\n\n"
+msgstr "Припустимі значення pg_control:\n\n"
+
+#: pg_resetwal.c:746
+#, c-format
+msgid "Current pg_control values:\n\n"
+msgstr "Поточні значення pg_control:\n\n"
+
+#: pg_resetwal.c:748
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_control номер версії: %u\n"
+
+#: pg_resetwal.c:750
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Номер версії каталогу: %u\n"
+
+#: pg_resetwal.c:752
+#, c-format
+msgid "Database system identifier: %llu\n"
+msgstr "Системний ідентифікатор бази даних: %llu\n"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "Останній TimeLineID контрольної точки: %u\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "Останній full_page_writes контрольної точки: %s\n"
+
+#: pg_resetwal.c:757
+msgid "off"
+msgstr "вимк"
+
+#: pg_resetwal.c:757
+msgid "on"
+msgstr "увімк"
+
+#: pg_resetwal.c:758
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "Останній NextXID контрольної точки: %u%u\n"
+
+#: pg_resetwal.c:761
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "Останній NextOID контрольної точки: %u\n"
+
+#: pg_resetwal.c:763
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "Останній NextMultiXactId контрольної точки: %u\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "Останній NextMultiOffset контрольної точки: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "Останній oldestXID контрольної точки: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "Остання DB останнього oldestXID контрольної точки: %u\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "Останній oldestActiveXID контрольної точки: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "Останній oldestMultiXid контрольної точки: %u \n"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "Остання DB останньої oldestMulti контрольної точки: %u\n"
+
+#: pg_resetwal.c:777
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "Останній oldestCommitTsXid контрольної точки:%u\n"
+
+#: pg_resetwal.c:779
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "Останній newestCommitTsXid контрольної точки: %u\n"
+
+#: pg_resetwal.c:781
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "Максимальне вирівнювання даних: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "Розмір блоку бази даних: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "Блоків на сегмент великого відношення: %u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "Pозмір блоку WAL: %u\n"
+
+#: pg_resetwal.c:790 pg_resetwal.c:876
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "Байтів на сегмент WAL: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "Максимальна довжина ідентифікаторів: %u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "Максимальна кількість стовпців в індексі: %u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "Максимальний розмір сегменту TOAST: %u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "Розмір сегменту великих обїєктів: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "Дата/час типу сховища: %s\n"
+
+#: pg_resetwal.c:802
+msgid "64-bit integers"
+msgstr "64-бітні цілі"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "Передача аргументу Float8: %s\n"
+
+#: pg_resetwal.c:804
+msgid "by reference"
+msgstr "за посиланням"
+
+#: pg_resetwal.c:804
+msgid "by value"
+msgstr "за значенням"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "Версія контрольних сум сторінок даних: %u\n"
+
+#: pg_resetwal.c:819
+#, c-format
+msgid "\n\n"
+"Values to be changed:\n\n"
+msgstr "\n\n"
+"Значення, що потребують зміни:\n\n"
+
+#: pg_resetwal.c:823
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "Перший сегмент журналу після скидання: %s\n"
+
+#: pg_resetwal.c:827
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:829
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:831
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMulti's DB: %u\n"
+
+#: pg_resetwal.c:837
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:843
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:849
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:851
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:853
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID's DB: %u\n"
+
+#: pg_resetwal.c:859
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "Епоха NextXID: %u\n"
+
+#: pg_resetwal.c:865
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:956 pg_resetwal.c:1024 pg_resetwal.c:1071
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "не вдалося відкрити каталог \"%s\": %m"
+
+#: pg_resetwal.c:991 pg_resetwal.c:1044 pg_resetwal.c:1094
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "не вдалося прочитати каталог \"%s\": %m"
+
+#: pg_resetwal.c:997 pg_resetwal.c:1050 pg_resetwal.c:1100
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "не вдалося закрити каталог \"%s\": %m"
+
+#: pg_resetwal.c:1036 pg_resetwal.c:1086
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "не вдалося видалити файл \"%s\": %m"
+
+#: pg_resetwal.c:1167
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "не можливо відкрити файл \"%s\": %m"
+
+#: pg_resetwal.c:1177 pg_resetwal.c:1190
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "не вдалося записати файл \"%s\": %m"
+
+#: pg_resetwal.c:1197
+#, c-format
+msgid "fsync error: %m"
+msgstr "помилка fsync: %m"
+
+#: pg_resetwal.c:1208
+#, c-format
+msgid "%s resets the PostgreSQL write-ahead log.\n\n"
+msgstr "%s скидає журнал передзапису PostgreSQL.\n\n"
+
+#: pg_resetwal.c:1209
+#, c-format
+msgid "Usage:\n"
+" %s [OPTION]... DATADIR\n\n"
+msgstr "Використання:\n"
+" %s [OPTION]... КАТАЛОГ_ДАНИХ\n\n"
+
+#: pg_resetwal.c:1210
+#, c-format
+msgid "Options:\n"
+msgstr "Параметри:\n"
+
+#: pg_resetwal.c:1211
+#, c-format
+msgid " -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr " -c, --commit-timestamp-ids=XID,XID \n"
+" встановити найстарішу та найновішу транзакції\n"
+" затвердити позначку часу (0 -- не змінювати)\n"
+
+#: pg_resetwal.c:1214
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR каталог даних\n"
+
+#: pg_resetwal.c:1215
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH встановити наступну епоху ID транзакцій\n"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force потрібно виконати оновлення\n"
+
+#: pg_resetwal.c:1217
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFILE задати мінімальне початкове розташування для нового WAL\n"
+
+#: pg_resetwal.c:1218
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID задати ідентифікатор наступної і найстарішої мультитранзакції\n"
+
+#: pg_resetwal.c:1219
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run не оновлювати, лише показати, що буде зроблено\n"
+
+#: pg_resetwal.c:1220
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID задати наступний OID\n"
+
+#: pg_resetwal.c:1221
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET задати зсув наступної мультітранзакції\n"
+
+#: pg_resetwal.c:1222
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version вивести інформацію про версію і вийти\n"
+
+#: pg_resetwal.c:1223
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID задати ідентифікатор наступної транзакції\n"
+
+#: pg_resetwal.c:1224
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=SIZE розміри сегментів WAL у мегабайтах\n"
+
+#: pg_resetwal.c:1225
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показати довідку, потім вийти\n"
+
+#: pg_resetwal.c:1226
+#, c-format
+msgid "\n"
+"Report bugs to <%s>.\n"
+msgstr "\n"
+"Повідомляти про помилки на <%s>.\n"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Домашня сторінка %s: <%s>\n"
+
diff --git a/src/bin/pg_resetwal/po/zh_CN.po b/src/bin/pg_resetwal/po/zh_CN.po
new file mode 100644
index 0000000..f5cec00
--- /dev/null
+++ b/src/bin/pg_resetwal/po/zh_CN.po
@@ -0,0 +1,639 @@
+# LANGUAGE message translation file for pg_resetwal
+# Copyright (C) 2019 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_resetwal (PostgreSQL) package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_resetwal (PostgreSQL) 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-05-22 17:56+0800\n"
+"PO-Revision-Date: 2019-05-31 17:30+0800\n"
+"Last-Translator: Jie Zhang <zhangjie2@cn.fujitsu.com>\n"
+"Language-Team: Chinese (Simplified) <zhangjie2@cn.fujitsu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:188
+#, c-format
+msgid "fatal: "
+msgstr "致命的: "
+
+#: ../../../src/common/logging.c:195
+#, c-format
+msgid "error: "
+msgstr "错误: "
+
+#: ../../../src/common/logging.c:202
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/restricted_token.c:69
+#, c-format
+msgid "cannot create restricted tokens on this platform"
+msgstr "无法为该平台创建受限制的令牌"
+
+#: ../../common/restricted_token.c:78
+#, c-format
+msgid "could not open process token: error code %lu"
+msgstr "无法打开进程令牌 (token): 错误码 %lu"
+
+#: ../../common/restricted_token.c:91
+#, c-format
+msgid "could not allocate SIDs: error code %lu"
+msgstr "无法分配SID: 错误码 %lu"
+
+#: ../../common/restricted_token.c:110
+#, c-format
+msgid "could not create restricted token: error code %lu"
+msgstr "无法创建受限令牌: 错误码为 %lu"
+
+#: ../../common/restricted_token.c:131
+#, c-format
+msgid "could not start process for command \"%s\": error code %lu"
+msgstr "无法为命令 \"%s\"创建进程: 错误码 %lu"
+
+#: ../../common/restricted_token.c:169
+#, c-format
+msgid "could not re-execute with restricted token: error code %lu"
+msgstr "无法使用受限令牌再次执行: 错误码 %lu"
+
+#: ../../common/restricted_token.c:185
+#, c-format
+msgid "could not get exit code from subprocess: error code %lu"
+msgstr "无法从子进程得到退出码: 错误码 %lu"
+
+#. translator: the second %s is a command line argument (-e, etc)
+#: pg_resetwal.c:160 pg_resetwal.c:175 pg_resetwal.c:190 pg_resetwal.c:197
+#: pg_resetwal.c:221 pg_resetwal.c:236 pg_resetwal.c:244 pg_resetwal.c:269
+#: pg_resetwal.c:283
+#, c-format
+msgid "invalid argument for option %s"
+msgstr "选项%s的参数无效"
+
+#: pg_resetwal.c:161 pg_resetwal.c:176 pg_resetwal.c:191 pg_resetwal.c:198
+#: pg_resetwal.c:222 pg_resetwal.c:237 pg_resetwal.c:245 pg_resetwal.c:270
+#: pg_resetwal.c:284 pg_resetwal.c:310 pg_resetwal.c:323 pg_resetwal.c:331
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "请用 \"%s --help\" 获取更多的信息.\n"
+
+#: pg_resetwal.c:166
+#, c-format
+msgid "transaction ID epoch (-e) must not be -1"
+msgstr "事务ID epoch(-e)不能为-1"
+
+#: pg_resetwal.c:181
+#, c-format
+msgid "transaction ID (-x) must not be 0"
+msgstr "事务ID(-x)不能为0"
+
+#: pg_resetwal.c:205 pg_resetwal.c:212
+#, c-format
+msgid "transaction ID (-c) must be either 0 or greater than or equal to 2"
+msgstr "事务ID(-c)必须为0或大于或等于2"
+
+#: pg_resetwal.c:227
+#, c-format
+msgid "OID (-o) must not be 0"
+msgstr "OID (-o)不能为0"
+
+#: pg_resetwal.c:250
+#, c-format
+msgid "multitransaction ID (-m) must not be 0"
+msgstr "多事务ID(-m)不能为0"
+
+#: pg_resetwal.c:260
+#, c-format
+msgid "oldest multitransaction ID (-m) must not be 0"
+msgstr "最早的多事务ID(-m)不能为0"
+
+#: pg_resetwal.c:275
+#, c-format
+msgid "multitransaction offset (-O) must not be -1"
+msgstr "多事务偏移量(-O)不能为-1"
+
+#: pg_resetwal.c:299
+#, c-format
+msgid "argument of --wal-segsize must be a number"
+msgstr "--wal-segsize的参数必须是数字"
+
+#: pg_resetwal.c:304
+#, c-format
+msgid "argument of --wal-segsize must be a power of 2 between 1 and 1024"
+msgstr "--wal-segsize的参数必须是2的幂次方(在1和1024之间)"
+
+#: pg_resetwal.c:321
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "命令行参数太多 (第一个是 \"%s\")"
+
+#: pg_resetwal.c:330
+#, c-format
+msgid "no data directory specified"
+msgstr "没有指定数据目录"
+
+#: pg_resetwal.c:344
+#, fc-format
+msgid "cannot be executed by \"root\""
+msgstr "不能由\"root\"执行"
+
+#: pg_resetwal.c:345
+#, c-format
+msgid "You must run %s as the PostgreSQL superuser."
+msgstr "您现在作为PostgreSQL超级用户运行%s."
+
+#: pg_resetwal.c:356
+#, c-format
+msgid "could not read permissions of directory \"%s\": %m"
+msgstr "没有读取目录 \"%s\" 的权限: %m"
+
+#: pg_resetwal.c:365
+#, c-format
+msgid "could not change directory to \"%s\": %m"
+msgstr "无法跳转到目录 \"%s\" 中: %m"
+
+#: pg_resetwal.c:381 pg_resetwal.c:545 pg_resetwal.c:602
+#, c-format
+msgid "could not open file \"%s\" for reading: %m"
+msgstr "为了读取, 无法打开文件 \"%s\": %m"
+
+#: pg_resetwal.c:388
+#, c-format
+msgid "lock file \"%s\" exists"
+msgstr "锁文件 \"%s\" 存在"
+
+#: pg_resetwal.c:389
+#, c-format
+msgid "Is a server running? If not, delete the lock file and try again."
+msgstr "服务器是否正在运行?如果没有,请删除锁文件并重试."
+
+#: pg_resetwal.c:492
+#, c-format
+msgid ""
+"\n"
+"If these values seem acceptable, use -f to force reset.\n"
+msgstr ""
+"\n"
+"如果这些值似乎可以接受,则使用-f强制重置.\n"
+
+#: pg_resetwal.c:504
+#, c-format
+msgid ""
+"The database server was not shut down cleanly.\n"
+"Resetting the write-ahead log might cause data to be lost.\n"
+"If you want to proceed anyway, use -f to force reset.\n"
+msgstr ""
+"数据库服务器未完全关闭 .\n"
+"重置预写日志可能会导致数据丢失.\n"
+"如果仍要继续,请使用-f强制重置.\n"
+
+#: pg_resetwal.c:518
+#, c-format
+msgid "Write-ahead log reset\n"
+msgstr "重置预写日志\n"
+
+#: pg_resetwal.c:554
+#, c-format
+msgid "unexpected empty file \"%s\""
+msgstr "意外的空文件\"%s\""
+
+#: pg_resetwal.c:556 pg_resetwal.c:618
+#, c-format
+msgid "could not read file \"%s\": %m"
+msgstr "无法读取文件 \"%s\": %m"
+
+#: pg_resetwal.c:571
+#, c-format
+msgid "data directory is of wrong version"
+msgstr "数据目录版本错误"
+
+#: pg_resetwal.c:572
+#, c-format
+msgid "File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\"."
+msgstr "文件\"%s\"包含\"%s\",与此程序的版本\"%s\"不兼容."
+
+#: pg_resetwal.c:605
+#, c-format
+msgid ""
+"If you are sure the data directory path is correct, execute\n"
+" touch %s\n"
+"and try again."
+msgstr ""
+"如果确定数据目录路径正确,请执行\n"
+" touch %s\n"
+"请再试一次"
+
+#: pg_resetwal.c:636
+#, c-format
+msgid "pg_control exists but has invalid CRC; proceed with caution"
+msgstr "pg_control存在,但具有无效的CRC;请小心继续"
+
+#: pg_resetwal.c:645
+#, c-format
+msgid "pg_control specifies invalid WAL segment size (%d byte); proceed with caution"
+msgid_plural "pg_control specifies invalid WAL segment size (%d bytes); proceed with caution"
+msgstr[0] "pg_control指定的WAL段大小(%d 字节)无效; 请小心继续"
+msgstr[1] "pg_control指定的WAL段大小(%d 字节)无效; 请小心继续"
+
+#: pg_resetwal.c:656
+#, c-format
+msgid "pg_control exists but is broken or wrong version; ignoring it"
+msgstr "pg_control存在,但已损坏或版本错误;忽略它"
+
+#: pg_resetwal.c:754
+#, c-format
+msgid ""
+"Guessed pg_control values:\n"
+"\n"
+msgstr ""
+"猜测的pg_control的值:\n"
+"\n"
+
+#: pg_resetwal.c:756
+#, c-format
+msgid ""
+"Current pg_control values:\n"
+"\n"
+msgstr ""
+"当前的pg_control的值:\n"
+"\n"
+
+#: pg_resetwal.c:765
+#, c-format
+msgid "pg_control version number: %u\n"
+msgstr "pg_control 版本: %u\n"
+
+#: pg_resetwal.c:767
+#, c-format
+msgid "Catalog version number: %u\n"
+msgstr "Catalog 版本: %u\n"
+
+#: pg_resetwal.c:769
+#, c-format
+msgid "Database system identifier: %s\n"
+msgstr "数据库系统标识符: %s\n"
+
+#: pg_resetwal.c:771
+#, c-format
+msgid "Latest checkpoint's TimeLineID: %u\n"
+msgstr "最新检查点的 TimeLineID: %u\n"
+
+#: pg_resetwal.c:773
+#, c-format
+msgid "Latest checkpoint's full_page_writes: %s\n"
+msgstr "最新检查点的full_page_writes: %s\n"
+
+#: pg_resetwal.c:774
+msgid "off"
+msgstr "关闭"
+
+#: pg_resetwal.c:774
+msgid "on"
+msgstr "开启"
+
+#: pg_resetwal.c:775
+#, c-format
+msgid "Latest checkpoint's NextXID: %u:%u\n"
+msgstr "最新检查点的NextXID: %u:%u\n"
+
+#: pg_resetwal.c:778
+#, c-format
+msgid "Latest checkpoint's NextOID: %u\n"
+msgstr "最新检查点的 NextOID: %u\n"
+
+#: pg_resetwal.c:780
+#, c-format
+msgid "Latest checkpoint's NextMultiXactId: %u\n"
+msgstr "最新检查点的NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:782
+#, c-format
+msgid "Latest checkpoint's NextMultiOffset: %u\n"
+msgstr "最新检查点的NextMultiOffsetD: %u\n"
+
+#: pg_resetwal.c:784
+#, c-format
+msgid "Latest checkpoint's oldestXID: %u\n"
+msgstr "最新检查点的oldestXID: %u\n"
+
+#: pg_resetwal.c:786
+#, c-format
+msgid "Latest checkpoint's oldestXID's DB: %u\n"
+msgstr "最新检查点的oldestXID所在的数据库:%u\n"
+
+#: pg_resetwal.c:788
+#, c-format
+msgid "Latest checkpoint's oldestActiveXID: %u\n"
+msgstr "最新检查点的oldestActiveXID: %u\n"
+
+#: pg_resetwal.c:790
+#, c-format
+msgid "Latest checkpoint's oldestMultiXid: %u\n"
+msgstr "最新检查点的oldestMultiXid: %u\n"
+
+#: pg_resetwal.c:792
+#, c-format
+msgid "Latest checkpoint's oldestMulti's DB: %u\n"
+msgstr "最新检查点的oldestMulti所在的数据库:%u\n"
+
+#: pg_resetwal.c:794
+#, c-format
+msgid "Latest checkpoint's oldestCommitTsXid:%u\n"
+msgstr "最新检查点的oldestCommitTsXid:%u\n"
+
+#: pg_resetwal.c:796
+#, c-format
+msgid "Latest checkpoint's newestCommitTsXid:%u\n"
+msgstr "最新检查点的newestCommitTsXid:%u\n"
+
+#: pg_resetwal.c:798
+#, c-format
+msgid "Maximum data alignment: %u\n"
+msgstr "最大数据校准: %u\n"
+
+#: pg_resetwal.c:801
+#, c-format
+msgid "Database block size: %u\n"
+msgstr "数据库块大小: %u\n"
+
+#: pg_resetwal.c:803
+#, c-format
+msgid "Blocks per segment of large relation: %u\n"
+msgstr "大关系的每段块数: %u\n"
+
+#: pg_resetwal.c:805
+#, c-format
+msgid "WAL block size: %u\n"
+msgstr "WAL的块大小: %u\n"
+
+#: pg_resetwal.c:807 pg_resetwal.c:895
+#, c-format
+msgid "Bytes per WAL segment: %u\n"
+msgstr "每一个 WAL 段字节数: %u\n"
+
+#: pg_resetwal.c:809
+#, c-format
+msgid "Maximum length of identifiers: %u\n"
+msgstr "标识符的最大长度: %u\n"
+
+#: pg_resetwal.c:811
+#, c-format
+msgid "Maximum columns in an index: %u\n"
+msgstr "在索引中可允许使用最大的列数: %u\n"
+
+#: pg_resetwal.c:813
+#, c-format
+msgid "Maximum size of a TOAST chunk: %u\n"
+msgstr "TOAST区块的最大长度: %u\n"
+
+#: pg_resetwal.c:815
+#, c-format
+msgid "Size of a large-object chunk: %u\n"
+msgstr "大对象区块的大小: %u\n"
+
+#: pg_resetwal.c:818
+#, c-format
+msgid "Date/time type storage: %s\n"
+msgstr "日期/时间 类型存储: %s\n"
+
+#: pg_resetwal.c:819
+msgid "64-bit integers"
+msgstr "64位整数"
+
+#: pg_resetwal.c:820
+#, c-format
+msgid "Float4 argument passing: %s\n"
+msgstr "正在传递Flloat4类型的参数: %s\n"
+
+#: pg_resetwal.c:821 pg_resetwal.c:823
+msgid "by reference"
+msgstr "由引用"
+
+#: pg_resetwal.c:821 pg_resetwal.c:823
+msgid "by value"
+msgstr "由值"
+
+#: pg_resetwal.c:822
+#, c-format
+msgid "Float8 argument passing: %s\n"
+msgstr "正在传递Flloat8类型的参数: %s\n"
+
+#: pg_resetwal.c:824
+#, c-format
+msgid "Data page checksum version: %u\n"
+msgstr "数据页校验和版本: %u\n"
+
+#: pg_resetwal.c:838
+#, c-format
+msgid ""
+"\n"
+"\n"
+"Values to be changed:\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"要更改的值:\n"
+
+#: pg_resetwal.c:842
+#, c-format
+msgid "First log segment after reset: %s\n"
+msgstr "First log segment after reset: %s\n"
+
+#: pg_resetwal.c:846
+#, c-format
+msgid "NextMultiXactId: %u\n"
+msgstr "NextMultiXactId: %u\n"
+
+#: pg_resetwal.c:848
+#, c-format
+msgid "OldestMultiXid: %u\n"
+msgstr "OldestMultiXid: %u\n"
+
+#: pg_resetwal.c:850
+#, c-format
+msgid "OldestMulti's DB: %u\n"
+msgstr "OldestMulti's DB: %u\n"
+
+#: pg_resetwal.c:856
+#, c-format
+msgid "NextMultiOffset: %u\n"
+msgstr "NextMultiOffset: %u\n"
+
+#: pg_resetwal.c:862
+#, c-format
+msgid "NextOID: %u\n"
+msgstr "NextOID: %u\n"
+
+#: pg_resetwal.c:868
+#, c-format
+msgid "NextXID: %u\n"
+msgstr "NextXID: %u\n"
+
+#: pg_resetwal.c:870
+#, c-format
+msgid "OldestXID: %u\n"
+msgstr "OldestXID: %u\n"
+
+#: pg_resetwal.c:872
+#, c-format
+msgid "OldestXID's DB: %u\n"
+msgstr "OldestXID's DB: %u\n"
+
+#: pg_resetwal.c:878
+#, c-format
+msgid "NextXID epoch: %u\n"
+msgstr "NextXID epoch: %u\n"
+
+#: pg_resetwal.c:884
+#, c-format
+msgid "oldestCommitTsXid: %u\n"
+msgstr "oldestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:889
+#, c-format
+msgid "newestCommitTsXid: %u\n"
+msgstr "newestCommitTsXid: %u\n"
+
+#: pg_resetwal.c:975 pg_resetwal.c:1043 pg_resetwal.c:1090
+#, c-format
+msgid "could not open directory \"%s\": %m"
+msgstr "无法打开目录 \"%s\": %m"
+
+#: pg_resetwal.c:1010 pg_resetwal.c:1063 pg_resetwal.c:1113
+#, c-format
+msgid "could not read directory \"%s\": %m"
+msgstr "无法读取目录 \"%s\": %m"
+
+#: pg_resetwal.c:1016 pg_resetwal.c:1069 pg_resetwal.c:1119
+#, c-format
+msgid "could not close directory \"%s\": %m"
+msgstr "无法关闭目录 \"%s\": %m"
+
+#: pg_resetwal.c:1055 pg_resetwal.c:1105
+#, c-format
+msgid "could not delete file \"%s\": %m"
+msgstr "无法删除文件 \"%s\": %m"
+
+#: pg_resetwal.c:1186
+#, c-format
+msgid "could not open file \"%s\": %m"
+msgstr "无法打开文件 \"%s\": %m"
+
+#: pg_resetwal.c:1196 pg_resetwal.c:1209
+#, c-format
+msgid "could not write file \"%s\": %m"
+msgstr "无法写入文件 \"%s\": %m"
+
+#: pg_resetwal.c:1216
+#, c-format
+msgid "fsync error: %m"
+msgstr "fsync 错误: %m"
+
+#: pg_resetwal.c:1227
+#, c-format
+msgid ""
+"%s resets the PostgreSQL write-ahead log.\n"
+"\n"
+msgstr "%s 重置一个PostgreSQL数据库集簇的预写式日志.\n"
+
+#: pg_resetwal.c:1228
+#, c-format
+msgid ""
+"Usage:\n"
+" %s [OPTION]... DATADIR\n"
+"\n"
+msgstr ""
+"用法:\n"
+" %s [选项]... 数据目录\n"
+
+#: pg_resetwal.c:1229
+#, c-format
+msgid "Options:\n"
+msgstr "选项:\n"
+
+#: pg_resetwal.c:1230
+#, c-format
+msgid ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" set oldest and newest transactions bearing\n"
+" commit timestamp (zero means no change)\n"
+msgstr ""
+" -c, --commit-timestamp-ids=XID,XID\n"
+" 设置提交时间可以检索到的最老的和最新的事务ID\n"
+" (0意味着没有变化)\n"
+
+#: pg_resetwal.c:1233
+#, c-format
+msgid " [-D, --pgdata=]DATADIR data directory\n"
+msgstr " [-D, --pgdata=]DATADIR 数据目录\n"
+
+#: pg_resetwal.c:1234
+#, c-format
+msgid " -e, --epoch=XIDEPOCH set next transaction ID epoch\n"
+msgstr " -e, --epoch=XIDEPOCH 设置下一个事务ID的epoch\n"
+
+#: pg_resetwal.c:1235
+#, c-format
+msgid " -f, --force force update to be done\n"
+msgstr " -f, --force 强制更新完成\n"
+
+#: pg_resetwal.c:1236
+#, c-format
+msgid " -l, --next-wal-file=WALFILE set minimum starting location for new WAL\n"
+msgstr " -l, --next-wal-file=WALFILE 设置新的WAL最小起始位置\n"
+
+#: pg_resetwal.c:1237
+#, c-format
+msgid " -m, --multixact-ids=MXID,MXID set next and oldest multitransaction ID\n"
+msgstr " -m, --multixact-ids=MXID,MXID 设置下一个和最旧的多事务ID\n"
+
+#: pg_resetwal.c:1238
+#, c-format
+msgid " -n, --dry-run no update, just show what would be done\n"
+msgstr " -n, --dry-run 不更新,只显示将要执行的操作\n"
+
+#: pg_resetwal.c:1239
+#, c-format
+msgid " -o, --next-oid=OID set next OID\n"
+msgstr " -o, --next-oid=OID 设置下一个OID\n"
+
+#: pg_resetwal.c:1240
+#, c-format
+msgid " -O, --multixact-offset=OFFSET set next multitransaction offset\n"
+msgstr " -O, --multixact-offset=OFFSET 设置下一个多事务偏移量\n"
+
+#: pg_resetwal.c:1241
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息,然后退出\n"
+
+#: pg_resetwal.c:1242
+#, c-format
+msgid " -x, --next-transaction-id=XID set next transaction ID\n"
+msgstr " -x, --next-transaction-id=XID 设置下一个事务ID\n"
+
+#: pg_resetwal.c:1243
+#, c-format
+msgid " --wal-segsize=SIZE size of WAL segments, in megabytes\n"
+msgstr " --wal-segsize=SIZE WAL段的大小(兆字节)\n"
+
+#: pg_resetwal.c:1244
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示本帮助,然后退出\n"
+
+#: pg_resetwal.c:1245
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+msgstr ""
+"\n"
+"报告错误至 <pgsql-bugs@lists.postgresql.org>.\n"
+
diff --git a/src/bin/pg_resetwal/t/001_basic.pl b/src/bin/pg_resetwal/t/001_basic.pl
new file mode 100644
index 0000000..ca93ddb
--- /dev/null
+++ b/src/bin/pg_resetwal/t/001_basic.pl
@@ -0,0 +1,27 @@
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 12;
+
+program_help_ok('pg_resetwal');
+program_version_ok('pg_resetwal');
+program_options_handling_ok('pg_resetwal');
+
+my $node = get_new_node('main');
+$node->init;
+
+command_like([ 'pg_resetwal', '-n', $node->data_dir ],
+ qr/checkpoint/, 'pg_resetwal -n produces output');
+
+
+# Permissions on PGDATA should be default
+SKIP:
+{
+ skip "unix-style permissions not supported on Windows", 1
+ if ($windows_os);
+
+ ok(check_mode_recursive($node->data_dir, 0700, 0600),
+ 'check PGDATA permissions');
+}
diff --git a/src/bin/pg_resetwal/t/002_corrupted.pl b/src/bin/pg_resetwal/t/002_corrupted.pl
new file mode 100644
index 0000000..f9940d7
--- /dev/null
+++ b/src/bin/pg_resetwal/t/002_corrupted.pl
@@ -0,0 +1,53 @@
+# Tests for handling a corrupted pg_control
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 6;
+
+my $node = get_new_node('main');
+$node->init;
+
+my $pg_control = $node->data_dir . '/global/pg_control';
+my $size = (stat($pg_control))[7];
+
+# Read out the head of the file to get PG_CONTROL_VERSION in
+# particular.
+my $data;
+open my $fh, '<', $pg_control or BAIL_OUT($!);
+binmode $fh;
+read $fh, $data, 16;
+close $fh;
+
+# Fill pg_control with zeros
+open $fh, '>', $pg_control or BAIL_OUT($!);
+binmode $fh;
+print $fh pack("x[$size]");
+close $fh;
+
+command_checks_all(
+ [ 'pg_resetwal', '-n', $node->data_dir ],
+ 0,
+ [qr/pg_control version number/],
+ [
+ qr/pg_resetwal: warning: pg_control exists but is broken or wrong version; ignoring it/
+ ],
+ 'processes corrupted pg_control all zeroes');
+
+# Put in the previously saved header data. This uses a different code
+# path internally, allowing us to process a zero WAL segment size.
+open $fh, '>', $pg_control or BAIL_OUT($!);
+binmode $fh;
+print $fh $data, pack("x[" . ($size - 16) . "]");
+close $fh;
+
+command_checks_all(
+ [ 'pg_resetwal', '-n', $node->data_dir ],
+ 0,
+ [qr/pg_control version number/],
+ [
+ qr/\Qpg_resetwal: warning: pg_control specifies invalid WAL segment size (0 bytes); proceed with caution\E/
+ ],
+ 'processes zero WAL segment size');