summaryrefslogtreecommitdiffstats
path: root/src/bin/pg_test_fsync
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_test_fsync')
-rw-r--r--src/bin/pg_test_fsync/.gitignore3
-rw-r--r--src/bin/pg_test_fsync/Makefile36
-rw-r--r--src/bin/pg_test_fsync/nls.mk5
-rw-r--r--src/bin/pg_test_fsync/pg_test_fsync.c630
-rw-r--r--src/bin/pg_test_fsync/po/cs.po210
-rw-r--r--src/bin/pg_test_fsync/po/de.po174
-rw-r--r--src/bin/pg_test_fsync/po/el.po178
-rw-r--r--src/bin/pg_test_fsync/po/es.po178
-rw-r--r--src/bin/pg_test_fsync/po/fr.po188
-rw-r--r--src/bin/pg_test_fsync/po/ja.po177
-rw-r--r--src/bin/pg_test_fsync/po/ko.po191
-rw-r--r--src/bin/pg_test_fsync/po/pl.po189
-rw-r--r--src/bin/pg_test_fsync/po/ru.po196
-rw-r--r--src/bin/pg_test_fsync/po/sv.po175
-rw-r--r--src/bin/pg_test_fsync/po/tr.po194
-rw-r--r--src/bin/pg_test_fsync/po/uk.po161
-rw-r--r--src/bin/pg_test_fsync/po/vi.po195
-rw-r--r--src/bin/pg_test_fsync/po/zh_CN.po171
-rw-r--r--src/bin/pg_test_fsync/t/001_basic.pl28
19 files changed, 3279 insertions, 0 deletions
diff --git a/src/bin/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
new file mode 100644
index 0000000..5eb5085
--- /dev/null
+++ b/src/bin/pg_test_fsync/.gitignore
@@ -0,0 +1,3 @@
+/pg_test_fsync
+
+/tmp_check/
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..631d0f3
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,36 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+OBJS = \
+ $(WIN32RES) \
+ pg_test_fsync.o
+
+all: pg_test_fsync
+
+pg_test_fsync: $(OBJS) | submake-libpgport
+ $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+ $(INSTALL_PROGRAM) pg_test_fsync$(X) '$(DESTDIR)$(bindir)/pg_test_fsync$(X)'
+
+installdirs:
+ $(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+check:
+ $(prove_check)
+
+installcheck:
+ $(prove_installcheck)
+
+uninstall:
+ rm -f '$(DESTDIR)$(bindir)/pg_test_fsync$(X)'
+
+clean distclean maintainer-clean:
+ rm -f pg_test_fsync$(X) $(OBJS)
+ rm -rf tmp_check
diff --git a/src/bin/pg_test_fsync/nls.mk b/src/bin/pg_test_fsync/nls.mk
new file mode 100644
index 0000000..3449f1b
--- /dev/null
+++ b/src/bin/pg_test_fsync/nls.mk
@@ -0,0 +1,5 @@
+# src/bin/pg_test_fsync/nls.mk
+CATALOG_NAME = pg_test_fsync
+AVAIL_LANGUAGES = cs de el es fr ja ko pl ru sv tr uk vi zh_CN
+GETTEXT_FILES = pg_test_fsync.c
+GETTEXT_TRIGGERS = die
diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
new file mode 100644
index 0000000..78dab50
--- /dev/null
+++ b/src/bin/pg_test_fsync/pg_test_fsync.c
@@ -0,0 +1,630 @@
+/*
+ * pg_test_fsync.c
+ * tests all supported fsync() methods
+ */
+
+#include "postgres_fe.h"
+
+#include <limits.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include "access/xlogdefs.h"
+#include "common/logging.h"
+#include "getopt_long.h"
+
+/*
+ * put the temp files in the local directory
+ * unless the user specifies otherwise
+ */
+#define FSYNC_FILENAME "./pg_test_fsync.out"
+
+#define XLOG_BLCKSZ_K (XLOG_BLCKSZ / 1024)
+
+#define LABEL_FORMAT " %-30s"
+#define NA_FORMAT "%21s\n"
+/* translator: maintain alignment with NA_FORMAT */
+#define OPS_FORMAT gettext_noop("%13.3f ops/sec %6.0f usecs/op\n")
+#define USECS_SEC 1000000
+
+/* These are macros to avoid timing the function call overhead. */
+#ifndef WIN32
+#define START_TIMER \
+do { \
+ alarm_triggered = false; \
+ alarm(secs_per_test); \
+ gettimeofday(&start_t, NULL); \
+} while (0)
+#else
+/* WIN32 doesn't support alarm, so we create a thread and sleep there */
+#define START_TIMER \
+do { \
+ alarm_triggered = false; \
+ if (CreateThread(NULL, 0, process_alarm, NULL, 0, NULL) == \
+ INVALID_HANDLE_VALUE) \
+ { \
+ pg_log_error("could not create thread for alarm"); \
+ exit(1); \
+ } \
+ gettimeofday(&start_t, NULL); \
+} while (0)
+#endif
+
+#define STOP_TIMER \
+do { \
+ gettimeofday(&stop_t, NULL); \
+ print_elapse(start_t, stop_t, ops); \
+} while (0)
+
+
+static const char *progname;
+
+static unsigned int secs_per_test = 5;
+static int needs_unlink = 0;
+static char full_buf[DEFAULT_XLOG_SEG_SIZE],
+ *buf,
+ *filename = FSYNC_FILENAME;
+static struct timeval start_t,
+ stop_t;
+static bool alarm_triggered = false;
+
+
+static void handle_args(int argc, char *argv[]);
+static void prepare_buf(void);
+static void test_open(void);
+static void test_non_sync(void);
+static void test_sync(int writes_per_op);
+static void test_open_syncs(void);
+static void test_open_sync(const char *msg, int writes_size);
+static void test_file_descriptor_sync(void);
+
+#ifndef WIN32
+static void process_alarm(int sig);
+#else
+static DWORD WINAPI process_alarm(LPVOID param);
+#endif
+static void signal_cleanup(int sig);
+
+#ifdef HAVE_FSYNC_WRITETHROUGH
+static int pg_fsync_writethrough(int fd);
+#endif
+static void print_elapse(struct timeval start_t, struct timeval stop_t, int ops);
+
+#define die(msg) do { pg_log_error("%s: %m", _(msg)); exit(1); } while(0)
+
+
+int
+main(int argc, char *argv[])
+{
+ pg_logging_init(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_test_fsync"));
+ progname = get_progname(argv[0]);
+
+ handle_args(argc, argv);
+
+ /* Prevent leaving behind the test file */
+ pqsignal(SIGINT, signal_cleanup);
+ pqsignal(SIGTERM, signal_cleanup);
+#ifndef WIN32
+ pqsignal(SIGALRM, process_alarm);
+#endif
+#ifdef SIGHUP
+ /* Not defined on win32 */
+ pqsignal(SIGHUP, signal_cleanup);
+#endif
+
+ prepare_buf();
+
+ test_open();
+
+ /* Test using 1 XLOG_BLCKSZ write */
+ test_sync(1);
+
+ /* Test using 2 XLOG_BLCKSZ writes */
+ test_sync(2);
+
+ test_open_syncs();
+
+ test_file_descriptor_sync();
+
+ test_non_sync();
+
+ unlink(filename);
+
+ return 0;
+}
+
+static void
+handle_args(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"filename", required_argument, NULL, 'f'},
+ {"secs-per-test", required_argument, NULL, 's'},
+ {NULL, 0, NULL, 0}
+ };
+
+ int option; /* Command line option */
+ int optindex = 0; /* used by getopt_long */
+ unsigned long optval; /* used for option parsing */
+ char *endptr;
+
+ if (argc > 1)
+ {
+ if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
+ {
+ printf(_("Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"), progname);
+ exit(0);
+ }
+ if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
+ {
+ puts("pg_test_fsync (PostgreSQL) " PG_VERSION);
+ exit(0);
+ }
+ }
+
+ while ((option = getopt_long(argc, argv, "f:s:",
+ long_options, &optindex)) != -1)
+ {
+ switch (option)
+ {
+ case 'f':
+ filename = pg_strdup(optarg);
+ break;
+
+ case 's':
+ errno = 0;
+ optval = strtoul(optarg, &endptr, 10);
+
+ if (endptr == optarg || *endptr != '\0' ||
+ errno != 0 || optval != (unsigned int) optval)
+ {
+ pg_log_error("invalid argument for option %s", "--secs-per-test");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ secs_per_test = (unsigned int) optval;
+ if (secs_per_test == 0)
+ {
+ pg_log_error("%s must be in range %u..%u",
+ "--secs-per-test", 1, UINT_MAX);
+ exit(1);
+ }
+ break;
+
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+ progname);
+ exit(1);
+ break;
+ }
+ }
+
+ if (argc > optind)
+ {
+ 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);
+ }
+
+ printf(ngettext("%u second per test\n",
+ "%u seconds per test\n",
+ secs_per_test),
+ secs_per_test);
+#if PG_O_DIRECT != 0
+ printf(_("O_DIRECT supported on this platform for open_datasync and open_sync.\n"));
+#else
+ printf(_("Direct I/O is not supported on this platform.\n"));
+#endif
+}
+
+static void
+prepare_buf(void)
+{
+ int ops;
+
+ /* write random data into buffer */
+ for (ops = 0; ops < DEFAULT_XLOG_SEG_SIZE; ops++)
+ full_buf[ops] = random();
+
+ buf = (char *) TYPEALIGN(XLOG_BLCKSZ, full_buf);
+}
+
+static void
+test_open(void)
+{
+ int tmpfile;
+
+ /*
+ * test if we can open the target file
+ */
+ if ((tmpfile = open(filename, O_RDWR | O_CREAT | PG_BINARY, S_IRUSR | S_IWUSR)) == -1)
+ die("could not open output file");
+ needs_unlink = 1;
+ if (write(tmpfile, full_buf, DEFAULT_XLOG_SEG_SIZE) !=
+ DEFAULT_XLOG_SEG_SIZE)
+ die("write failed");
+
+ /* fsync now so that dirty buffers don't skew later tests */
+ if (fsync(tmpfile) != 0)
+ die("fsync failed");
+
+ close(tmpfile);
+}
+
+static void
+test_sync(int writes_per_op)
+{
+ int tmpfile,
+ ops,
+ writes;
+ bool fs_warning = false;
+
+ if (writes_per_op == 1)
+ printf(_("\nCompare file sync methods using one %dkB write:\n"), XLOG_BLCKSZ_K);
+ else
+ printf(_("\nCompare file sync methods using two %dkB writes:\n"), XLOG_BLCKSZ_K);
+ printf(_("(in wal_sync_method preference order, except fdatasync is Linux's default)\n"));
+
+ /*
+ * Test open_datasync if available
+ */
+ printf(LABEL_FORMAT, "open_datasync");
+ fflush(stdout);
+
+#ifdef OPEN_DATASYNC_FLAG
+ if ((tmpfile = open(filename, O_RDWR | O_DSYNC | PG_O_DIRECT | PG_BINARY, 0)) == -1)
+ {
+ printf(NA_FORMAT, _("n/a*"));
+ fs_warning = true;
+ }
+ else
+ {
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < writes_per_op; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ XLOG_BLCKSZ,
+ writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+ }
+#else
+ printf(NA_FORMAT, _("n/a"));
+#endif
+
+/*
+ * Test fdatasync if available
+ */
+ printf(LABEL_FORMAT, "fdatasync");
+ fflush(stdout);
+
+#ifdef HAVE_FDATASYNC
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < writes_per_op; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ XLOG_BLCKSZ,
+ writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ fdatasync(tmpfile);
+ }
+ STOP_TIMER;
+ close(tmpfile);
+#else
+ printf(NA_FORMAT, _("n/a"));
+#endif
+
+/*
+ * Test fsync
+ */
+ printf(LABEL_FORMAT, "fsync");
+ fflush(stdout);
+
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < writes_per_op; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ XLOG_BLCKSZ,
+ writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ if (fsync(tmpfile) != 0)
+ die("fsync failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+
+/*
+ * If fsync_writethrough is available, test as well
+ */
+ printf(LABEL_FORMAT, "fsync_writethrough");
+ fflush(stdout);
+
+#ifdef HAVE_FSYNC_WRITETHROUGH
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < writes_per_op; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ XLOG_BLCKSZ,
+ writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ if (pg_fsync_writethrough(tmpfile) != 0)
+ die("fsync failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+#else
+ printf(NA_FORMAT, _("n/a"));
+#endif
+
+/*
+ * Test open_sync if available
+ */
+ printf(LABEL_FORMAT, "open_sync");
+ fflush(stdout);
+
+#ifdef OPEN_SYNC_FLAG
+ if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG | PG_O_DIRECT | PG_BINARY, 0)) == -1)
+ {
+ printf(NA_FORMAT, _("n/a*"));
+ fs_warning = true;
+ }
+ else
+ {
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < writes_per_op; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ XLOG_BLCKSZ,
+ writes * XLOG_BLCKSZ) != XLOG_BLCKSZ)
+
+ /*
+ * This can generate write failures if the filesystem has
+ * a large block size, e.g. 4k, and there is no support
+ * for O_DIRECT writes smaller than the file system block
+ * size, e.g. XFS.
+ */
+ die("write failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+ }
+#else
+ printf(NA_FORMAT, _("n/a"));
+#endif
+
+ if (fs_warning)
+ {
+ printf(_("* This file system and its mount options do not support direct\n"
+ " I/O, e.g. ext4 in journaled mode.\n"));
+ }
+}
+
+static void
+test_open_syncs(void)
+{
+ printf(_("\nCompare open_sync with different write sizes:\n"));
+ printf(_("(This is designed to compare the cost of writing 16kB in different write\n"
+ "open_sync sizes.)\n"));
+
+ test_open_sync(_(" 1 * 16kB open_sync write"), 16);
+ test_open_sync(_(" 2 * 8kB open_sync writes"), 8);
+ test_open_sync(_(" 4 * 4kB open_sync writes"), 4);
+ test_open_sync(_(" 8 * 2kB open_sync writes"), 2);
+ test_open_sync(_("16 * 1kB open_sync writes"), 1);
+}
+
+/*
+ * Test open_sync with different size files
+ */
+static void
+test_open_sync(const char *msg, int writes_size)
+{
+#ifdef OPEN_SYNC_FLAG
+ int tmpfile,
+ ops,
+ writes;
+#endif
+
+ printf(LABEL_FORMAT, msg);
+ fflush(stdout);
+
+#ifdef OPEN_SYNC_FLAG
+ if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG | PG_O_DIRECT | PG_BINARY, 0)) == -1)
+ printf(NA_FORMAT, _("n/a*"));
+ else
+ {
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ for (writes = 0; writes < 16 / writes_size; writes++)
+ if (pg_pwrite(tmpfile,
+ buf,
+ writes_size * 1024,
+ writes * writes_size * 1024) !=
+ writes_size * 1024)
+ die("write failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+ }
+#else
+ printf(NA_FORMAT, _("n/a"));
+#endif
+}
+
+static void
+test_file_descriptor_sync(void)
+{
+ int tmpfile,
+ ops;
+
+ /*
+ * Test whether fsync can sync data written on a different descriptor for
+ * the same file. This checks the efficiency of multi-process fsyncs
+ * against the same file. Possibly this should be done with writethrough
+ * on platforms which support it.
+ */
+ printf(_("\nTest if fsync on non-write file descriptor is honored:\n"));
+ printf(_("(If the times are similar, fsync() can sync data written on a different\n"
+ "descriptor.)\n"));
+
+ /*
+ * first write, fsync and close, which is the normal behavior without
+ * multiple descriptors
+ */
+ printf(LABEL_FORMAT, "write, fsync, close");
+ fflush(stdout);
+
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ if (fsync(tmpfile) != 0)
+ die("fsync failed");
+ close(tmpfile);
+
+ /*
+ * open and close the file again to be consistent with the following
+ * test
+ */
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ close(tmpfile);
+ }
+ STOP_TIMER;
+
+ /*
+ * Now open, write, close, open again and fsync This simulates processes
+ * fsyncing each other's writes.
+ */
+ printf(LABEL_FORMAT, "write, close, fsync");
+ fflush(stdout);
+
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
+ die("write failed");
+ close(tmpfile);
+ /* reopen file */
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ if (fsync(tmpfile) != 0)
+ die("fsync failed");
+ close(tmpfile);
+ }
+ STOP_TIMER;
+}
+
+static void
+test_non_sync(void)
+{
+ int tmpfile,
+ ops;
+
+ /*
+ * Test a simple write without fsync
+ */
+ printf(_("\nNon-sync'ed %dkB writes:\n"), XLOG_BLCKSZ_K);
+ printf(LABEL_FORMAT, "write");
+ fflush(stdout);
+
+ if ((tmpfile = open(filename, O_RDWR | PG_BINARY, 0)) == -1)
+ die("could not open output file");
+ START_TIMER;
+ for (ops = 0; alarm_triggered == false; ops++)
+ {
+ if (pg_pwrite(tmpfile, buf, XLOG_BLCKSZ, 0) != XLOG_BLCKSZ)
+ die("write failed");
+ }
+ STOP_TIMER;
+ close(tmpfile);
+}
+
+static void
+signal_cleanup(int signum)
+{
+ /* Delete the file if it exists. Ignore errors */
+ if (needs_unlink)
+ unlink(filename);
+ /* Finish incomplete line on stdout */
+ puts("");
+ exit(signum);
+}
+
+#ifdef HAVE_FSYNC_WRITETHROUGH
+
+static int
+pg_fsync_writethrough(int fd)
+{
+#ifdef WIN32
+ return _commit(fd);
+#elif defined(F_FULLFSYNC)
+ return (fcntl(fd, F_FULLFSYNC, 0) == -1) ? -1 : 0;
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
+}
+#endif
+
+/*
+ * print out the writes per second for tests
+ */
+static void
+print_elapse(struct timeval start_t, struct timeval stop_t, int ops)
+{
+ double total_time = (stop_t.tv_sec - start_t.tv_sec) +
+ (stop_t.tv_usec - start_t.tv_usec) * 0.000001;
+ double per_second = ops / total_time;
+ double avg_op_time_us = (total_time / ops) * USECS_SEC;
+
+ printf(_(OPS_FORMAT), per_second, avg_op_time_us);
+}
+
+#ifndef WIN32
+static void
+process_alarm(int sig)
+{
+ alarm_triggered = true;
+}
+#else
+static DWORD WINAPI
+process_alarm(LPVOID param)
+{
+ /* WIN32 doesn't support alarm, so we create a thread and sleep here */
+ Sleep(secs_per_test * 1000);
+ alarm_triggered = true;
+ ExitThread(0);
+}
+#endif
diff --git a/src/bin/pg_test_fsync/po/cs.po b/src/bin/pg_test_fsync/po/cs.po
new file mode 100644
index 0000000..a654745
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/cs.po
@@ -0,0 +1,210 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2018 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 11\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2018-07-13 19:47+0000\n"
+"PO-Revision-Date: 2018-07-13 23:50+0200\n"
+"Last-Translator: \n"
+"Language-Team: \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.0.7\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:30
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:49
+#, c-format
+msgid "Could not create thread for alarm\n"
+msgstr "Nelze vytvořit thread pro alarm\n"
+
+#: pg_test_fsync.c:154
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Použití: %s [-f SOUBOR] [-s SECS-PER-TEST]\n"
+
+#: pg_test_fsync.c:178 pg_test_fsync.c:190
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Zkuste \"%s --help\" pro více informací.\n"
+
+#: pg_test_fsync.c:188
+#, c-format
+msgid "%s: too many command-line arguments (first is \"%s\")\n"
+msgstr ""
+"%s: příliš mnoho argumentů v příkazové řádce (první je \"%s\")\n"
+
+#: pg_test_fsync.c:195
+#, c-format
+msgid "%d second per test\n"
+msgid_plural "%d seconds per test\n"
+msgstr[0] "%d sekund per test\n"
+msgstr[1] "%d seconds per test\n"
+msgstr[2] "%d seconds per test\n"
+
+#: pg_test_fsync.c:200
+#, c-format
+msgid ""
+"O_DIRECT supported on this platform for open_datasync and "
+"open_sync.\n"
+msgstr ""
+"O_DIRECT podporováno na této platformě pro open_datasync a "
+"open_sync.\n"
+
+#: pg_test_fsync.c:202
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Direct I/O není na této platformě podporováno.\n"
+
+#: pg_test_fsync.c:227 pg_test_fsync.c:292 pg_test_fsync.c:316
+#: pg_test_fsync.c:339 pg_test_fsync.c:480 pg_test_fsync.c:492
+#: pg_test_fsync.c:508 pg_test_fsync.c:514 pg_test_fsync.c:539
+msgid "could not open output file"
+msgstr "nelze otevřít výstupní soubor"
+
+#: pg_test_fsync.c:231 pg_test_fsync.c:273 pg_test_fsync.c:298
+#: pg_test_fsync.c:322 pg_test_fsync.c:345 pg_test_fsync.c:383
+#: pg_test_fsync.c:441 pg_test_fsync.c:482 pg_test_fsync.c:510
+#: pg_test_fsync.c:541
+msgid "write failed"
+msgstr "zápis selhal"
+
+#: pg_test_fsync.c:235 pg_test_fsync.c:324 pg_test_fsync.c:347
+#: pg_test_fsync.c:484 pg_test_fsync.c:516
+msgid "fsync failed"
+msgstr "fsync selhal"
+
+#: pg_test_fsync.c:249
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Srovnání sync metod souboru pomocí jednoho %dkB zápisu:\n"
+
+#: pg_test_fsync.c:251
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Srovnání sync metod souboru pomocí dvou %dkB zápisů:\n"
+
+#: pg_test_fsync.c:252
+#, c-format
+msgid ""
+"(in wal_sync_method preference order, except fdatasync is Linux's "
+"default)\n"
+msgstr ""
+"(v pořadí dle wal_sync_method, s výjimkou že fdatasync je výchozí na "
+"Linuxu)\n"
+
+#: pg_test_fsync.c:263 pg_test_fsync.c:366 pg_test_fsync.c:432
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:275 pg_test_fsync.c:301 pg_test_fsync.c:326
+#: pg_test_fsync.c:349 pg_test_fsync.c:385 pg_test_fsync.c:443
+msgid "seek failed"
+msgstr "nastavení pozice (seek) selhalo"
+
+#: pg_test_fsync.c:281 pg_test_fsync.c:306 pg_test_fsync.c:354
+#: pg_test_fsync.c:391 pg_test_fsync.c:449
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:396
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Tento souborový systém a jeho mount volby nepodporují direct\n"
+" I/O, e.g. ext4 v journaled módu.\n"
+
+#: pg_test_fsync.c:404
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Srovnání open_sync s různými velikostmi zápisů:\n"
+
+#: pg_test_fsync.c:405
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different "
+"write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Toto je navrženo pro srovnání ceny zápisu 16kB s různými "
+"velikostmi\n"
+"zápisů open_sync.)\n"
+
+#: pg_test_fsync.c:408
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync write"
+
+#: pg_test_fsync.c:409
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync writes"
+
+#: pg_test_fsync.c:410
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync writes"
+
+#: pg_test_fsync.c:411
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync writes"
+
+#: pg_test_fsync.c:412
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync writes"
+
+#: pg_test_fsync.c:465
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Testuje zda fsync funguje na non-write file descriptoru:\n"
+
+#: pg_test_fsync.c:466
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a "
+"different\n"
+"descriptor.)\n"
+msgstr ""
+"(Pokud jsou výsledky podobné, fsync() může synchronizovat data\n"
+"zapsaná na různých descriptorech.)\n"
+
+#: pg_test_fsync.c:531
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+
+#: pg_test_fsync.c:608
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/de.po b/src/bin/pg_test_fsync/po/de.po
new file mode 100644
index 0000000..290551e
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/de.po
@@ -0,0 +1,174 @@
+# German message translation file for pg_test_fsync
+# Copyright (C) 2017-2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-04-13 21:19+0000\n"
+"PO-Revision-Date: 2021-04-14 00:04+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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr " %13.3f Op./s %6.0f µs/Op.\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Aufruf: %s [-f DATEINAME] [-s SEK-PRO-TEST]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u Sekunde pro Test\n"
+msgstr[1] "%u Sekunden pro Test\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT wird auf dieser Plattform für open_datasync und open_sync unterstützt.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Direct-I/O wird auf dieser Plattform nicht unterstützt.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518
+#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562
+msgid "could not open output file"
+msgstr "konnte Ausgabedatei nicht öffnen"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410
+#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536
+#: pg_test_fsync.c:567
+msgid "write failed"
+msgstr "Schreiben fehlgeschlagen"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:510 pg_test_fsync.c:542
+msgid "fsync failed"
+msgstr "fsync fehlgeschlagen"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Vergleich von Datei-Sync-Methoden bei einem Schreibvorgang aus %dkB:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Vergleich von Datei-Sync-Methoden bei zwei Schreibvorgängen aus je %dkB:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(in Rangordnung von wal_sync_method, außer dass fdatasync auf Linux Standard ist)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457
+msgid "n/a*"
+msgstr "entf.*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:416 pg_test_fsync.c:475
+msgid "n/a"
+msgstr "entf."
+
+#: pg_test_fsync.c:421
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Dieses Dateisystem und die Mount-Optionen unterstützen kein Direct-I/O,\n"
+" z.B. ext4 im Journaled-Modus.\n"
+
+#: pg_test_fsync.c:429
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Vergleich von open_sync mit verschiedenen Schreibgrößen:\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Damit werden die Kosten für das Schreiben von 16kB in verschieden Größen mit\n"
+"open_sync verglichen.)\n"
+
+#: pg_test_fsync.c:433
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync schreiben"
+
+#: pg_test_fsync.c:434
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync schreiben"
+
+#: pg_test_fsync.c:435
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync schreiben"
+
+#: pg_test_fsync.c:436
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync schreiben"
+
+#: pg_test_fsync.c:437
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync schreiben"
+
+#: pg_test_fsync.c:491
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Probe ob fsync auf einem anderen Dateideskriptor funktioniert:\n"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Wenn die Zeiten ähnlich sind, dann kann fsync() auf einem anderen Deskriptor\n"
+"geschriebene Daten syncen.)\n"
+
+#: pg_test_fsync.c:557
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Nicht gesynctes Schreiben von %dkB:\n"
diff --git a/src/bin/pg_test_fsync/po/el.po b/src/bin/pg_test_fsync/po/el.po
new file mode 100644
index 0000000..016547e
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/el.po
@@ -0,0 +1,178 @@
+# Greek message translation file for pg_test_fsync
+# Copyright (C) 2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# Georgios Kokolatos <gkokolatos@pm.me>, 2021
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-07-20 08:49+0000\n"
+"PO-Revision-Date: 2021-07-20 10:59+0200\n"
+"Last-Translator: Georgios Kokolatos <gkokolatos@pm.me>\n"
+"Language-Team: \n"
+"Language: el\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"
+"X-Generator: Poedit 3.0\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Χρήση: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Δοκιμάστε «%s --help» για περισσότερες πληροφορίες.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u δευτερόλεπτο ανά τεστ\n"
+msgstr[1] "%u δευτερόλεπτα ανά τεστ\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT υποστηρίζεται σε αυτήν την πλατφόρμα για open_datasync και open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Άμεσο I/O δεν υποστηρίζεται σε αυτήν την πλατφόρμα.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "δεν ήταν δυνατό το άνοιγμα αρχείου εξόδου"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "απέτυχε η εγγραφή"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "fsync απέτυχε"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Συγκρίνετε τις μεθόδους συγχρονισμού αρχείων χρησιμοποιώντας μία εγγραφή %dkB:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Συγκρίνετε τις μεθόδους συγχρονισμού αρχείων χρησιμοποιώντας δύο εγγραφές %dkB:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(με wal_sync_method σειρά προτίμησης, εκτός από fdatasync είναι η προεπιλογή σε Linux)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Αυτό το σύστημα αρχείων και οι επιλογές προσάρτησής του δεν υποστηρίζουν\n"
+" άμεσο I/O, π.χ. ext4 σε λειτουργία journal.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Συγκρίνετε open_sync με διαφορετικά μεγέθη εγγραφής:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Αυτό έχει σχεδιαστεί για να συγκρίνει το κόστος της γραφής 16kB σε διαφορετικά\n"
+"μεγέθη open_sync.)\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync εγγραφή"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync εγγραφές"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync εγγραφές"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync εγγραφές"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync εγγραφές"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Ελέγξτε εάν τηρείται το fsync σε μη-εγγράψιμο περιγραφέα αρχείων:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Εάν οι χρόνοι είναι παρόμοιοι, το fsync() μπορεί να συγχρονίσει δεδομένα εγγεγραμμένα\n"
+"σε διαφορετικό περιγραφέα.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Μη-συγχρονισμένες %dkB εγγραφές:\n"
diff --git a/src/bin/pg_test_fsync/po/es.po b/src/bin/pg_test_fsync/po/es.po
new file mode 100644
index 0000000..d6c601e
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/es.po
@@ -0,0 +1,178 @@
+# Spanish message translation file for pg_test_fsync
+#
+# Copyright (c) 2017-2021, PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Carlos Chapi <carloswaldo@babelruins.org>, 2017, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-08-07 20:36+0000\n"
+"PO-Revision-Date: 2021-05-21 23:25-0500\n"
+"Last-Translator: Carlos Chapi <carloswaldo@babelruins.org>\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"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.4.3\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/seg %6.0f usegs/op\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Empleo: %s [-f ARCHIVO] [-s SEG-POR-PRUEBA]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Pruebe «%s --help» para mayor información.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u segundo por prueba\n"
+msgstr[1] "%u segundos por prueba\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT tiene soporte en esta plataforma para open_datasync y open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Direct I/O no está soportado en esta plataforma.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "no se pudo abrir el archivo de salida"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "escritura falló"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "fsync falló"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Comparar métodos de sincronización de archivos usando una escritura de %dkB:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Comparar métodos de sincronización de archivos usando dos escrituras de %dkB:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(en orden de preferencia de wal_sync_method, excepto en Linux donde fdatasync es el predeterminado)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Este sistema de archivos con sus opciones de montaje no soportan\n"
+" Direct I/O, e.g. ext4 en modo journal.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Comparar open_sync con diferentes tamaños de escritura:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Esto está diseñado para comparar el costo de escribir 16kB en diferentes\n"
+"tamaños de escrituras open_sync.)\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB escritura open_sync"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB escrituras open_sync"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB escrituras open_sync"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB escrituras open_sync"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB escrituras open_sync"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Probar si se respeta fsync en un descriptor de archivo que no es de escritura:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Si los tiempos son similares, fsync() puede sincronizar datos escritos\n"
+"en un descriptor diferente.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Escrituras de %dkB no sincronizadas:\n"
diff --git a/src/bin/pg_test_fsync/po/fr.po b/src/bin/pg_test_fsync/po/fr.po
new file mode 100644
index 0000000..cc9800a
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/fr.po
@@ -0,0 +1,188 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-04-15 01:49+0000\n"
+"PO-Revision-Date: 2021-04-15 08:43+0200\n"
+"Last-Translator: \n"
+"Language-Team: \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.4.2\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Usage: %s [-f NOMFICHIER] [-s SECS-PAR-TEST]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Essayez « %s --help » pour plus d'informations.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u seconde par test\n"
+msgstr[1] "%u secondes par test\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT supporté sur cette plateforme pour open_datasync et open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Direct I/O n'est pas supporté sur cette plateforme.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:506 pg_test_fsync.c:518
+#: pg_test_fsync.c:534 pg_test_fsync.c:540 pg_test_fsync.c:562
+msgid "could not open output file"
+msgstr "n'a pas pu ouvrir le fichier en sortie"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:410
+#: pg_test_fsync.c:469 pg_test_fsync.c:508 pg_test_fsync.c:536
+#: pg_test_fsync.c:567
+msgid "write failed"
+msgstr "échec en écriture"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:510 pg_test_fsync.c:542
+msgid "fsync failed"
+msgstr "échec de la synchronisation (fsync)"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Comparer les méthodes de synchronisation de fichier en utilisant une écriture de %d Ko :\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Comparer les méthodes de synchronisation de fichier sur disque en utilisant deux écritures de %d Ko :\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(dans l'ordre de préférence de wal_sync_method, sauf fdatasync qui est la valeur par défaut sous Linux)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:457
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:416 pg_test_fsync.c:475
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:421
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Ce système de fichiers et ses options de montage ne supportent pas les\n"
+" I/O directes, par exemple ext4 en journalisé.\n"
+
+#: pg_test_fsync.c:429
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Comparer open_sync avec différentes tailles d'écriture :\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Ceci est conçu pour comparer le coût d'écriture de 16 Ko dans différentes tailles\n"
+"d'écritures open_sync.)\n"
+
+#: pg_test_fsync.c:433
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16 Ko, écriture avec open_sync"
+
+#: pg_test_fsync.c:434
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8 Ko, écriture avec open_sync"
+
+#: pg_test_fsync.c:435
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4 Ko, écriture avec open_sync"
+
+#: pg_test_fsync.c:436
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2 Ko, écriture avec open_sync"
+
+#: pg_test_fsync.c:437
+msgid "16 * 1kB open_sync writes"
+msgstr " 16 * 1 Ko, écriture avec open_sync"
+
+#: pg_test_fsync.c:491
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Teste si fsync est honoré sur un descripteur de fichiers sans écriture :\n"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Si les temps sont similaires, fsync() peut synchroniser sur disque les données écrites sur\n"
+"un descripteur différent.)\n"
+
+#: pg_test_fsync.c:557
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"%d Ko d'écritures non synchronisées :\n"
+
+#~ msgid "%s: %s\n"
+#~ msgstr "%s : %s\n"
+
+#~ msgid "seek failed"
+#~ msgstr "seek échoué"
+
+#~ 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 "Could not create thread for alarm\n"
+#~ msgstr "N'a pas pu créer un thread pour l'alarme\n"
diff --git a/src/bin/pg_test_fsync/po/ja.po b/src/bin/pg_test_fsync/po/ja.po
new file mode 100644
index 0000000..525f7fe
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/ja.po
@@ -0,0 +1,177 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2022 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL 14)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-25 17:22+0900\n"
+"PO-Revision-Date: 2021-05-17 14:56+0900\n"
+"Last-Translator: Michihide Hotta <hotta@net-newbie.com>\n"
+"Language-Team: \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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f 操作/秒 %6.0f μ秒/操作\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "使用法: %s [-f ファイル名] [-s テストあたりの秒数]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "詳細は\"%s --help\"で確認してください。\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "テスト1件あたり%u秒\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr ""
+"このプラットフォームではopen_datasyncとopen_syncについてO_DIRECTが\n"
+"サポートされています。\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "このプラットフォームではダイレクトI/Oがサポートされていません。\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "出力ファイルをオープンできませんでした"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "書き込みに失敗"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "fsyncに失敗"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"%dkBの書込みを1回行ってファイル同期方法を比較します:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"%dkBの書込みを2回行ってファイル同期方法を比較します:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(Linuxのデフォルトであるfdatasyncを除きwal_sync_methodの優先順)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "利用不可*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "利用不可"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* このファイルシステムとそのマウントオプションではダイレクトI/Oをサポート\n"
+" していません。例)ジャーナルモードの ext4。\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"open_sync を異なった書込みサイズで比較します:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(これはopen_syncの書込みサイズを変えながら、16kBの書込みのコストを比較する\n"
+"よう指定されています。)\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync書込み"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync書込み"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync書込み"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync書込み"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync書込み"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"書き込みのないのファイルディスクリプタ上のfsyncが無視されないかをテストします:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(もし実行時間が同等であれば、fsync()は異なったファイルディスクリプタ上で\n"
+"データをsyncできることになります。)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"%dkBの同期なし書込み:\n"
diff --git a/src/bin/pg_test_fsync/po/ko.po b/src/bin/pg_test_fsync/po/ko.po
new file mode 100644
index 0000000..a3aee6b
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/ko.po
@@ -0,0 +1,191 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Ioseph Kim <ioseph@uri.sarang.net>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-02-09 20:17+0000\n"
+"PO-Revision-Date: 2020-02-10 09:58+0900\n"
+"Last-Translator: Ioseph Kim <ioseph@uri.sarang.net>\n"
+"Language-Team: Korean <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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:157
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "사용법: %s [-f 파일이름] [-s 검사초]\n"
+
+#: pg_test_fsync.c:181 pg_test_fsync.c:192
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "자세한 사용법은 \"%s --help\" 명령을 이용하세요.\n"
+
+#: pg_test_fsync.c:197
+#, c-format
+msgid "%d second per test\n"
+msgid_plural "%d seconds per test\n"
+msgstr[0] "검사 간격: %d 초\n"
+
+#: pg_test_fsync.c:202
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr ""
+"이 플랫폼에서는 open_datasync, open_sync 에서 O_DIRECT 옵션을 지원함.\n"
+
+#: pg_test_fsync.c:204
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "이 플랫폼은 direct I/O 기능을 지원하지 않음.\n"
+
+#: pg_test_fsync.c:229 pg_test_fsync.c:294 pg_test_fsync.c:318
+#: pg_test_fsync.c:341 pg_test_fsync.c:482 pg_test_fsync.c:494
+#: pg_test_fsync.c:510 pg_test_fsync.c:516 pg_test_fsync.c:541
+msgid "could not open output file"
+msgstr "출력 파일을 열 수 없음"
+
+#: pg_test_fsync.c:233 pg_test_fsync.c:275 pg_test_fsync.c:300
+#: pg_test_fsync.c:324 pg_test_fsync.c:347 pg_test_fsync.c:385
+#: pg_test_fsync.c:443 pg_test_fsync.c:484 pg_test_fsync.c:512
+#: pg_test_fsync.c:543
+msgid "write failed"
+msgstr "쓰기 실패"
+
+#: pg_test_fsync.c:237 pg_test_fsync.c:326 pg_test_fsync.c:349
+#: pg_test_fsync.c:486 pg_test_fsync.c:518
+msgid "fsync failed"
+msgstr "fsync 실패"
+
+#: pg_test_fsync.c:251
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"하나의 %dkB 쓰기에 대한 파일 싱크 방법 비교:\n"
+
+#: pg_test_fsync.c:253
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"두개의 %dkB 쓰기에 대한 파일 싱크 방법 비교:\n"
+
+#: pg_test_fsync.c:254
+#, c-format
+msgid ""
+"(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr ""
+"(fdatasync가 리눅스 기본값이기에 제외하고, wal_sync_method 우선으로 처리 "
+"함)\n"
+
+#: pg_test_fsync.c:265 pg_test_fsync.c:368 pg_test_fsync.c:434
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:277 pg_test_fsync.c:303 pg_test_fsync.c:328
+#: pg_test_fsync.c:351 pg_test_fsync.c:387 pg_test_fsync.c:445
+msgid "seek failed"
+msgstr "찾기 실패"
+
+#: pg_test_fsync.c:283 pg_test_fsync.c:308 pg_test_fsync.c:356
+#: pg_test_fsync.c:393 pg_test_fsync.c:451
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:398
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* 이 파일 시스템과 마운트 옵션이 direct I/O 기능을 지원하지 않음\n"
+" 예: journaled mode에서 ext4\n"
+
+#: pg_test_fsync.c:406
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"서로 다른 쓰기량으로 open_sync 비교:\n"
+
+#: pg_test_fsync.c:407
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(서로 다른 크기로 16kB를 쓰는데, open_sync 옵션을 사용할 때의 비용 비교)\n"
+
+#: pg_test_fsync.c:410
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync 쓰기"
+
+#: pg_test_fsync.c:411
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync 쓰기"
+
+#: pg_test_fsync.c:412
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync 쓰기"
+
+#: pg_test_fsync.c:413
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync 쓰기"
+
+#: pg_test_fsync.c:414
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync 쓰기"
+
+#: pg_test_fsync.c:467
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"쓰기 방지 파일에서 fsync 작동 여부 검사:\n"
+
+#: pg_test_fsync.c:468
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(이 값이 비슷하다면, fsync() 호출로 여러 파일 상태에 대해서 sync를 사용\n"
+"할 수 있음.)\n"
+
+#: pg_test_fsync.c:533
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Non-sync %dkB 쓰기:\n"
+
+#~ msgid "Could not create thread for alarm\n"
+#~ msgstr "알람용 쓰레드를 만들 수 없음\n"
+
+#~ msgid "%s: too many command-line arguments (first is \"%s\")\n"
+#~ msgstr "%s: 너무 많은 명령행 인자를 지정했음 (시작은 \"%s\")\n"
+
+#~ msgid "%s: %s\n"
+#~ msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/pl.po b/src/bin/pg_test_fsync/po/pl.po
new file mode 100644
index 0000000..1554043
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/pl.po
@@ -0,0 +1,189 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# grzegorz <begina.felicysym@wp.eu>, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2017-03-14 17:46+0000\n"
+"PO-Revision-Date: 2017-03-14 19:29+0200\n"
+"Last-Translator: grzegorz <begina.felicysym@wp.eu>\n"
+"Language-Team: begina.felicysym@wp.eu\n"
+"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: pg_test_fsync.c:47
+#, c-format
+msgid "Cannot create thread for alarm\n"
+msgstr "Nie da się utworzyć wątku dla alarmu\n"
+
+#: pg_test_fsync.c:152
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Składnia: %s [-f NAZWAPLIKU] [-s SEK-NA-TEST]\n"
+
+#: pg_test_fsync.c:176 pg_test_fsync.c:188
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Użyj \"%s --help\" aby uzyskać więcej informacji.\n"
+
+#: pg_test_fsync.c:186
+#, c-format
+msgid "%s: too many command-line arguments (first is \"%s\")\n"
+msgstr "%s: za duża ilość parametrów (pierwszy to \"%s\")\n"
+
+#: pg_test_fsync.c:193
+#, c-format
+msgid "%d seconds per test\n"
+msgstr "%d sekund na test\n"
+
+#: pg_test_fsync.c:195
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT wspierane na tej platformie dla open_datasync i open_sync.\n"
+
+#: pg_test_fsync.c:197
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Bezpośrednie We/Wy nie jest wspierane na tej platformie.\n"
+
+#: pg_test_fsync.c:222 pg_test_fsync.c:286 pg_test_fsync.c:310
+#: pg_test_fsync.c:333 pg_test_fsync.c:474 pg_test_fsync.c:486
+#: pg_test_fsync.c:502 pg_test_fsync.c:508 pg_test_fsync.c:533
+msgid "could not open output file"
+msgstr "nie można otworzyć pliku wyjścia"
+
+#: pg_test_fsync.c:225 pg_test_fsync.c:267 pg_test_fsync.c:292
+#: pg_test_fsync.c:316 pg_test_fsync.c:339 pg_test_fsync.c:377
+#: pg_test_fsync.c:435 pg_test_fsync.c:476 pg_test_fsync.c:504
+#: pg_test_fsync.c:535
+msgid "write failed"
+msgstr "niepowodzenie zapisu"
+
+#: pg_test_fsync.c:229 pg_test_fsync.c:318 pg_test_fsync.c:341
+#: pg_test_fsync.c:478 pg_test_fsync.c:510
+msgid "fsync failed"
+msgstr "niepowodzenie fsync"
+
+#: pg_test_fsync.c:243
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Porównanie metod sync plików używając jednego zapisu %dkB:\n"
+
+#: pg_test_fsync.c:245
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Porównanie metod sync plików używając dwóch zapisów %dkB:\n"
+
+#: pg_test_fsync.c:246
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(w porząsku preferencji wal_sync_method, poza fdatasync domyślną na "
+"Linuksie)\n"
+
+#: pg_test_fsync.c:257 pg_test_fsync.c:360 pg_test_fsync.c:426
+msgid "n/a*\n"
+msgstr "nd.*\n"
+
+#: pg_test_fsync.c:269 pg_test_fsync.c:295 pg_test_fsync.c:320
+#: pg_test_fsync.c:343 pg_test_fsync.c:379 pg_test_fsync.c:437
+msgid "seek failed"
+msgstr "niepowodzenie pozycjonowania"
+
+#: pg_test_fsync.c:275 pg_test_fsync.c:300 pg_test_fsync.c:348
+#: pg_test_fsync.c:385 pg_test_fsync.c:443
+msgid "n/a\n"
+msgstr "nd.\n"
+
+#: pg_test_fsync.c:390
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Ten system plików i jego opcje systemowe mount nie obsługują\n"
+" bezpośredniego We/Wy, np. ext4 trybie dziennikowym.\n"
+
+#: pg_test_fsync.c:398
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Porównanie open_sync z różnymi długościami zapisu:\n"
+
+#: pg_test_fsync.c:399
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Zaprojektowano to dla porównanie kosztów zapisu 16kB w różnych \n"
+"długościach zapisu open_sync.)\n"
+
+#: pg_test_fsync.c:402
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB zapis open_sync"
+
+#: pg_test_fsync.c:403
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB zapis open_sync"
+
+#: pg_test_fsync.c:404
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB zapis open_sync"
+
+#: pg_test_fsync.c:405
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB zapis open_sync"
+
+#: pg_test_fsync.c:406
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB zapis open_sync"
+
+#: pg_test_fsync.c:459
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Test czy jest honorowany fsync na niezapisywalnym deskryptorze pliku:\n"
+
+#: pg_test_fsync.c:460
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Jeśli czasy są podobne, fsync() może sync dane zapisane na innym\n"
+"deskryptorze.)\n"
+
+#: pg_test_fsync.c:525
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Nie-syncowane zapisy %dkB:\n"
+
+#: pg_test_fsync.c:602
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/ru.po b/src/bin/pg_test_fsync/po/ru.po
new file mode 100644
index 0000000..ee4f829
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/ru.po
@@ -0,0 +1,196 @@
+# Russian message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Alexander Lakhin <a.lakhin@postgrespro.ru>, 2017, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-14 06:29+0300\n"
+"PO-Revision-Date: 2021-09-04 12:16+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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f оп/с %6.0f мкс/оп\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Использование: %s [-f ИМЯ_ФАЙЛА ] [-s ТЕСТ_СЕК]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Для дополнительной информации попробуйте \"%s --help\".\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "на тест отводится %u сек.\n"
+msgstr[1] "на тест отводится %u сек.\n"
+msgstr[2] "на тест отводится %u сек.\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr ""
+"O_DIRECT на этой платформе не поддерживается для open_datasync и open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Прямой ввод/вывод не поддерживается на этой платформе.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "не удалось открыть выходной файл"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "ошибка записи"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "ошибка синхронизации с ФС"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Сравнение методов синхронизации файлов при однократной записи %d КБ:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Сравнение методов синхронизации файлов при двухкратной записи %d КБ:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid ""
+"(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr ""
+"(в порядке предпочтения для wal_sync_method, без учёта наибольшего "
+"предпочтения fdatasync в Linux)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "н/д*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "н/д"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Эта файловая система с текущими параметрами монтирования не поддерживает\n"
+" прямой ввод/вывод, как например, ext4 в режиме журналирования.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Сравнение open_sync при различных объёмах записываемых данных:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Этот тест предназначен для сравнения стоимости записи 16 КБ при разных "
+"размерах\n"
+"записи с open_sync.)\n"
+
+# skip-rule: double-space
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr "запись с open_sync 1 * 16 КБ"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr "запись с open_sync 2 * 8 КБ"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr "запись с open_sync 4 * 4 КБ"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr "запись с open_sync 8 * 2 КБ"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "запись с open_sync 16 * 1 КБ"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Проверка, производится ли fsync с указателем файла, открытого не для "
+"записи:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Если длительность примерно одинаковая, fsync() может синхронизировать "
+"данные,\n"
+"записанные через другой дескриптор.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Несинхронизированная запись %d КБ:\n"
+
+#~ msgid "seek failed"
+#~ msgstr "ошибка позиционирования"
+
+#~ msgid "Could not create thread for alarm\n"
+#~ msgstr "Не удалось создать поток для обработки сигналов\n"
+
+#~ msgid "%s: too many command-line arguments (first is \"%s\")\n"
+#~ msgstr "%s: слишком много аргументов командной строки (первый: \"%s\")\n"
+
+#~ msgid "%s: %s\n"
+#~ msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/sv.po b/src/bin/pg_test_fsync/po/sv.po
new file mode 100644
index 0000000..9a20741
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/sv.po
@@ -0,0 +1,175 @@
+# Swedish message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Dennis Björklund <db@zigo.dhs.org>, 2017, 2018, 2019, 2020, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-11-06 22:18+0000\n"
+"PO-Revision-Date: 2021-11-07 07:19+0100\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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sek %6.0f useks/op\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Användning: %s [-f FILENAMN] [-s SEK-PER-TEST]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Försök med \"%s --help\" för mer information.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u sekund per test\n"
+msgstr[1] "%u sekunder per test\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT stöds på denna plattform för open_datasync och open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Direkt I/O stöds inte på denna plattform.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "kunde inte öppna utdatafil"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "skrivning misslyckades"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "fsync misslyckades"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Jämför filsynkningsmetoder genom att använda en %dkB-skrivning:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Jämför filsynkningsmetoder genom att använda två %dkB-skrivningar:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(i wal_sync_method inställningsordning, förutom att fdatasync är standard i Linux)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "ej tillämpbar*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "ej tillämpbar"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Detta filsystem och dess monteringsflaffor stöder inte\n"
+" direkt I/O, t.ex. ext4 i journalläge.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"Jämför open_sync med olika skrivstorlekar:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Detta är gjort för att jämföra kostnaden att skriva 16kB med olika\n"
+"open_sync skrivstorlekar.)\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync skrivning"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync skrivningar"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync skrivningar"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync skrivningar"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync skrivningar"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Testa om fsync på en icke skrivbar fildeskriptor respekteras:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Om tiderna är liknande, så kan fsync() synka data skriven på\n"
+"olika deskriptorer.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Icke-synkade %dkB-skrivningar:\n"
diff --git a/src/bin/pg_test_fsync/po/tr.po b/src/bin/pg_test_fsync/po/tr.po
new file mode 100644
index 0000000..12f0e28
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/tr.po
@@ -0,0 +1,194 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+# Abdullah GÜLNER <agulner@gmail.com>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 10\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2018-11-28 12:46+0000\n"
+"PO-Revision-Date: 2018-11-28 17:01+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"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.7.1\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:30
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:49
+#, c-format
+msgid "Could not create thread for alarm\n"
+msgstr "Alarm için thread oluşturulamadı\n"
+
+#: pg_test_fsync.c:154
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Kullanımı: %s [-f DOSYAADI] [-s TEST-BASINA-SANIYE]\n"
+
+#: pg_test_fsync.c:178 pg_test_fsync.c:190
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Daha fazla bilgi için \"%s --help\" yazın\n"
+
+#: pg_test_fsync.c:188
+#, c-format
+msgid "%s: too many command-line arguments (first is \"%s\")\n"
+msgstr "%s: Çok fazla komut satırı girdisi var (ilki \"%s\")\n"
+
+#: pg_test_fsync.c:195
+#, c-format
+msgid "%d second per test\n"
+msgid_plural "%d seconds per test\n"
+msgstr[0] "test başına %d saniye\n"
+
+#: pg_test_fsync.c:200
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "Bu platformda open_datasync ve open_sync için O_DIRECT destekleniyor.\n"
+
+#: pg_test_fsync.c:202
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Doğrudan I/O bu platformda desteklenmiyor.\n"
+
+#: pg_test_fsync.c:227 pg_test_fsync.c:292 pg_test_fsync.c:316
+#: pg_test_fsync.c:339 pg_test_fsync.c:480 pg_test_fsync.c:492
+#: pg_test_fsync.c:508 pg_test_fsync.c:514 pg_test_fsync.c:539
+msgid "could not open output file"
+msgstr "çıktı dosyası açılamadı"
+
+#: pg_test_fsync.c:231 pg_test_fsync.c:273 pg_test_fsync.c:298
+#: pg_test_fsync.c:322 pg_test_fsync.c:345 pg_test_fsync.c:383
+#: pg_test_fsync.c:441 pg_test_fsync.c:482 pg_test_fsync.c:510
+#: pg_test_fsync.c:541
+msgid "write failed"
+msgstr "yazma başarısız oldu"
+
+#: pg_test_fsync.c:235 pg_test_fsync.c:324 pg_test_fsync.c:347
+#: pg_test_fsync.c:484 pg_test_fsync.c:516
+msgid "fsync failed"
+msgstr "fsync başarısız oldu"
+
+#: pg_test_fsync.c:249
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"Dosya sync yöntemlerini bir %dkB yazma kullanarak karşılaştır\n"
+
+#: pg_test_fsync.c:251
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"Dosya sync yöntemlerini iki %dkB yazma kullanarak karşılaştır\n"
+
+#: pg_test_fsync.c:252
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(wal_sync_method tercih sırasında, fdatadync'in Linux'un varsayılanı olması dışında)\n"
+
+#: pg_test_fsync.c:263 pg_test_fsync.c:366 pg_test_fsync.c:432
+msgid "n/a*"
+msgstr "n/a* (uygulanamaz)"
+
+#: pg_test_fsync.c:275 pg_test_fsync.c:301 pg_test_fsync.c:326
+#: pg_test_fsync.c:349 pg_test_fsync.c:385 pg_test_fsync.c:443
+msgid "seek failed"
+msgstr "arama başarıız oldu"
+
+#: pg_test_fsync.c:281 pg_test_fsync.c:306 pg_test_fsync.c:354
+#: pg_test_fsync.c:391 pg_test_fsync.c:449
+msgid "n/a"
+msgstr "n/a (uygulanamaz)"
+
+#: pg_test_fsync.c:396
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Bu dosya sistemi ve bağlama (mount) seçenekleri doğrudan I/O\n"
+" desteklemiyor, örn: günlüklü modda ext4.\n"
+
+#: pg_test_fsync.c:404
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"open_sync ile farklı yazma boyutlarını kıyaslayın\n"
+
+#: pg_test_fsync.c:405
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Bu, farklı write open-sync boyutlarında 16kB yazma maliyetini karşılaştırmak\n"
+"için tasarlanmıştır.)\n"
+
+#: pg_test_fsync.c:408
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync yazma"
+
+#: pg_test_fsync.c:409
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync yazma"
+
+#: pg_test_fsync.c:410
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync yazma"
+
+#: pg_test_fsync.c:411
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync yazma"
+
+#: pg_test_fsync.c:412
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync yazma"
+
+#: pg_test_fsync.c:465
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+
+#: pg_test_fsync.c:466
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Zamanlar benzerse, fsync() farklı bir tanımlayıcıda (descriptor) yazılmış veriyi\n"
+"senkronize edebilir.)\n"
+
+#: pg_test_fsync.c:531
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"sync edilmemiş %dkB yazma:\n"
+
+#: pg_test_fsync.c:608
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/uk.po b/src/bin/pg_test_fsync/po/uk.po
new file mode 100644
index 0000000..f321cd1
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/uk.po
@@ -0,0 +1,161 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: postgresql\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-03-16 09:19+0000\n"
+"PO-Revision-Date: 2022-06-19 10:10\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: /REL_14_STABLE/pg_test_fsync.pot\n"
+"X-Crowdin-File-ID: 750\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f оп/с %6.0f мкс/оп\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Використання: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n"
+
+#: pg_test_fsync.c:216
+#, c-format
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u секунда на тест\n"
+msgstr[1] "%u секунди на тест\n"
+msgstr[2] "%u секунд на тест\n"
+msgstr[3] "%u секунд на тест\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT на цій платформі підтримується для open_datasync і open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "Пряме введення/виведення не підтримується на цій платформі.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "неможливо відкрити файл виводу"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "записування не вдалося"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "помилка fsync"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid "\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr "\n"
+"Порівнювання методів синхронізації файлу, використовуючи один запис %dkB:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid "\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr "\n"
+"Порівнювання методів синхронізації файлу, використовуючи два записи %dkB: \n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(в порядку переваги для wal_sync_method, окрім переваги fdatasync в Linux)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "н/д*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "н/д"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid "* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr "* Ця файлова система з поточними параметрами монтування не підтримує\n"
+" пряме введення/виведення, наприклад, ext4 в режимі журналювання.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid "\n"
+"Compare open_sync with different write sizes:\n"
+msgstr "\n"
+"Порівняння open_sync з різними розмірами записування:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid "(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr "(Це створено для порівняння вартості запису 16 КБ з різними розмірами\n"
+"записування open_sync.)\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " запис з open_sync 1 * 16 КБ"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " запис з open_sync 2 * 8 КБ"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " запис з open_sync 4 * 4 КБ"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " запис з open_sync 8 * 2 КБ"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "запис з open_sync 16 * 1 КБ"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid "\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr "\n"
+"Перевірка, чи здійснюється fsync з дескриптором файлу, відкритого не для запису:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid "(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr "(Якщо час однаковий, fsync() може синхронізувати дані, записані іншим дескриптором.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid "\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr "\n"
+"Несинхронізований запис %d КБ:\n"
+
diff --git a/src/bin/pg_test_fsync/po/vi.po b/src/bin/pg_test_fsync/po/vi.po
new file mode 100644
index 0000000..32a5b54
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/vi.po
@@ -0,0 +1,195 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2018 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# FIRST AUTHOR <kakalot49@gmail.com>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 11\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2018-04-22 12:17+0000\n"
+"PO-Revision-Date: 2018-04-30 00:47+0900\n"
+"Language-Team: <pgvn_translators@postgresql.vn>\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 2.0.6\n"
+"Last-Translator: Dang Minh Huong <kakalot49@gmail.com>\n"
+"Language: vi_VN\n"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:30
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f thao tác/giây %6.0f micro giây/thao tác\n"
+
+#: pg_test_fsync.c:49
+#, c-format
+msgid "Could not create thread for alarm\n"
+msgstr "Không thể tạo luồng sử dụng cho alarm\n"
+
+#: pg_test_fsync.c:154
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "Cách sử dụng: %s [-f TÊN FILE] [-s SỐ GIÂY CHO MỘT KIỂM TRA]\n"
+
+#: pg_test_fsync.c:178 pg_test_fsync.c:190
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Hãy thử \"%s --help\" để biết thêm thông tin.\n"
+
+#: pg_test_fsync.c:188
+#, c-format
+msgid "%s: too many command-line arguments (first is \"%s\")\n"
+msgstr "%s: quá nhiều đối số cho câu lệnh (đầu tiên là \"%s\")\n"
+
+#: pg_test_fsync.c:195
+#, c-format
+msgid "%d second per test\n"
+msgid_plural "%d seconds per test\n"
+msgstr[0] "%d giây cho mỗi kiểm tra\n"
+
+#: pg_test_fsync.c:200
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "O_DIRECT được hỗ trợ trên hệ điều hành này cho open_datasync và open_sync.\n"
+
+#: pg_test_fsync.c:202
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "I/O trực tiếp không được hỗ trợ trên hệ điều hành này.\n"
+
+#: pg_test_fsync.c:227 pg_test_fsync.c:292 pg_test_fsync.c:316
+#: pg_test_fsync.c:339 pg_test_fsync.c:480 pg_test_fsync.c:492
+#: pg_test_fsync.c:508 pg_test_fsync.c:514 pg_test_fsync.c:539
+msgid "could not open output file"
+msgstr "không thể mở tập tin đầu ra"
+
+#: pg_test_fsync.c:231 pg_test_fsync.c:273 pg_test_fsync.c:298
+#: pg_test_fsync.c:322 pg_test_fsync.c:345 pg_test_fsync.c:383
+#: pg_test_fsync.c:441 pg_test_fsync.c:482 pg_test_fsync.c:510
+#: pg_test_fsync.c:541
+msgid "write failed"
+msgstr "viết không thành công"
+
+#: pg_test_fsync.c:235 pg_test_fsync.c:324 pg_test_fsync.c:347
+#: pg_test_fsync.c:484 pg_test_fsync.c:516
+msgid "fsync failed"
+msgstr "đồng bộ không thành công"
+
+#: pg_test_fsync.c:249
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"So sánh các phương pháp đồng bộ hóa tệp sử dụng viết một %dkB:\n"
+
+#: pg_test_fsync.c:251
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"So sánh các phương pháp đồng bộ hóa tệp sử dụng viết hai %dkB:\n"
+
+#: pg_test_fsync.c:252
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(theo thứ tự ưu tiên tham số wal_sync_method, ngoại trừ fdatasync là mặc định của Linux)\n"
+
+#: pg_test_fsync.c:263 pg_test_fsync.c:366 pg_test_fsync.c:432
+msgid "n/a*"
+msgstr "không khả dụng*"
+
+#: pg_test_fsync.c:275 pg_test_fsync.c:301 pg_test_fsync.c:326
+#: pg_test_fsync.c:349 pg_test_fsync.c:385 pg_test_fsync.c:443
+msgid "seek failed"
+msgstr "seek lỗi"
+
+#: pg_test_fsync.c:281 pg_test_fsync.c:306 pg_test_fsync.c:354
+#: pg_test_fsync.c:391 pg_test_fsync.c:449
+msgid "n/a"
+msgstr "không khả dụng"
+
+#: pg_test_fsync.c:396
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* Hệ thống tệp này và tùy chọn mount không hỗ trợ I/O trực tiếp\n"
+" ví dụ: ext4 trong chế độ journaled.\n"
+
+#: pg_test_fsync.c:404
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"So sánh open_sync với các kích thước ghi khác nhau:\n"
+
+#: pg_test_fsync.c:405
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr ""
+"(Điều này được thiết kế để so sánh cost của việc viết 16kB trong các \n"
+"kích thước open_sync khác nhau.)\n"
+
+#: pg_test_fsync.c:408
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync write"
+
+#: pg_test_fsync.c:409
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync writes"
+
+#: pg_test_fsync.c:410
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync writes"
+
+#: pg_test_fsync.c:411
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync writes"
+
+#: pg_test_fsync.c:412
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync writes"
+
+#: pg_test_fsync.c:465
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"Kiểm tra xem fsync trên tệp descrtiptor không ghi có tốt không:\n"
+
+#: pg_test_fsync.c:466
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr ""
+"(Nếu số lần là tương đương, fsync() có thể đồng bộ dữ liệu được ghi ở \n"
+"descriptor khác.)\n"
+
+#: pg_test_fsync.c:531
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"Viết %dkB không sync:\n"
+
+#: pg_test_fsync.c:608
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
diff --git a/src/bin/pg_test_fsync/po/zh_CN.po b/src/bin/pg_test_fsync/po/zh_CN.po
new file mode 100644
index 0000000..e00a64b
--- /dev/null
+++ b/src/bin/pg_test_fsync/po/zh_CN.po
@@ -0,0 +1,171 @@
+# LANGUAGE message translation file for pg_test_fsync
+# Copyright (C) 2019 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_test_fsync (PostgreSQL) package.
+# FIRST AUTHOR <zhangjie2@fujitsu.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_test_fsync (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-14 05:49+0000\n"
+"PO-Revision-Date: 2021-08-15 18:00+0800\n"
+"Last-Translator: Jie Zhang <zhangjie2@fujitsu.com>\n"
+"Language-Team: Chinese (Simplified) <zhangjie2@fujitsu.com>\n"
+"Language: zh_CN\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"
+
+#. translator: maintain alignment with NA_FORMAT
+#: pg_test_fsync.c:31
+#, c-format
+msgid "%13.3f ops/sec %6.0f usecs/op\n"
+msgstr "%13.3f ops/sec %6.0f usecs/op\n"
+
+#: pg_test_fsync.c:159
+#, c-format
+msgid "Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n"
+msgstr "用法: %s [-f 文件名] [-s 每次测试的秒数]\n"
+
+#: pg_test_fsync.c:186 pg_test_fsync.c:200 pg_test_fsync.c:211
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "请用 \"%s --help\" 获取更多的信息.\n"
+
+#: pg_test_fsync.c:216
+msgid "%u second per test\n"
+msgid_plural "%u seconds per test\n"
+msgstr[0] "%u 每次测试的秒数\n"
+msgstr[1] "%u 每次测试的秒数\n"
+
+#: pg_test_fsync.c:221
+#, c-format
+msgid "O_DIRECT supported on this platform for open_datasync and open_sync.\n"
+msgstr "在此平台上,O_DIRECT支持open_datasync和open_sync.\n"
+
+#: pg_test_fsync.c:223
+#, c-format
+msgid "Direct I/O is not supported on this platform.\n"
+msgstr "此平台不支持直接I/O.\n"
+
+#: pg_test_fsync.c:248 pg_test_fsync.c:314 pg_test_fsync.c:339
+#: pg_test_fsync.c:363 pg_test_fsync.c:507 pg_test_fsync.c:519
+#: pg_test_fsync.c:535 pg_test_fsync.c:541 pg_test_fsync.c:563
+msgid "could not open output file"
+msgstr "无法打开输出文件"
+
+#: pg_test_fsync.c:252 pg_test_fsync.c:297 pg_test_fsync.c:323
+#: pg_test_fsync.c:348 pg_test_fsync.c:372 pg_test_fsync.c:411
+#: pg_test_fsync.c:470 pg_test_fsync.c:509 pg_test_fsync.c:537
+#: pg_test_fsync.c:568
+msgid "write failed"
+msgstr "写入失败"
+
+#: pg_test_fsync.c:256 pg_test_fsync.c:350 pg_test_fsync.c:374
+#: pg_test_fsync.c:511 pg_test_fsync.c:543
+msgid "fsync failed"
+msgstr "fsync失败"
+
+#: pg_test_fsync.c:270
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using one %dkB write:\n"
+msgstr ""
+"\n"
+"使用一个%dkB写操作比较文件同步方法:\n"
+
+#: pg_test_fsync.c:272
+#, c-format
+msgid ""
+"\n"
+"Compare file sync methods using two %dkB writes:\n"
+msgstr ""
+"\n"
+"使用两个%dkB写操作比较文件同步方法:\n"
+
+#: pg_test_fsync.c:273
+#, c-format
+msgid "(in wal_sync_method preference order, except fdatasync is Linux's default)\n"
+msgstr "(按照wal_sync_method首选顺序,fdatasync是Linux的默认值除外)\n"
+
+#: pg_test_fsync.c:284 pg_test_fsync.c:391 pg_test_fsync.c:458
+msgid "n/a*"
+msgstr "n/a*"
+
+#: pg_test_fsync.c:303 pg_test_fsync.c:329 pg_test_fsync.c:379
+#: pg_test_fsync.c:417 pg_test_fsync.c:476
+msgid "n/a"
+msgstr "n/a"
+
+#: pg_test_fsync.c:422
+#, c-format
+msgid ""
+"* This file system and its mount options do not support direct\n"
+" I/O, e.g. ext4 in journaled mode.\n"
+msgstr ""
+"* 此文件系统及其安装选项不支持直接I/O\n"
+" 例如. ext4 在 journaled 模式.\n"
+
+#: pg_test_fsync.c:430
+#, c-format
+msgid ""
+"\n"
+"Compare open_sync with different write sizes:\n"
+msgstr ""
+"\n"
+"在不同的写入大小的情况下比较open_sync:\n"
+
+#: pg_test_fsync.c:431
+#, c-format
+msgid ""
+"(This is designed to compare the cost of writing 16kB in different write\n"
+"open_sync sizes.)\n"
+msgstr "这是为了比较在写入不同的open_sync大小的情况下写入16kB的时间花费\n"
+
+#: pg_test_fsync.c:434
+msgid " 1 * 16kB open_sync write"
+msgstr " 1 * 16kB open_sync写入"
+
+#: pg_test_fsync.c:435
+msgid " 2 * 8kB open_sync writes"
+msgstr " 2 * 8kB open_sync写入"
+
+#: pg_test_fsync.c:436
+msgid " 4 * 4kB open_sync writes"
+msgstr " 4 * 4kB open_sync写入"
+
+#: pg_test_fsync.c:437
+msgid " 8 * 2kB open_sync writes"
+msgstr " 8 * 2kB open_sync写入"
+
+#: pg_test_fsync.c:438
+msgid "16 * 1kB open_sync writes"
+msgstr "16 * 1kB open_sync写入"
+
+#: pg_test_fsync.c:492
+#, c-format
+msgid ""
+"\n"
+"Test if fsync on non-write file descriptor is honored:\n"
+msgstr ""
+"\n"
+"测试是否支持非写文件描述符上的fsync:\n"
+
+#: pg_test_fsync.c:493
+#, c-format
+msgid ""
+"(If the times are similar, fsync() can sync data written on a different\n"
+"descriptor.)\n"
+msgstr "(如果时间相似,fsync()可以同步写在不同描述符上的数据.)\n"
+
+#: pg_test_fsync.c:558
+#, c-format
+msgid ""
+"\n"
+"Non-sync'ed %dkB writes:\n"
+msgstr ""
+"\n"
+"不同步的写入 %dkB :\n"
+
diff --git a/src/bin/pg_test_fsync/t/001_basic.pl b/src/bin/pg_test_fsync/t/001_basic.pl
new file mode 100644
index 0000000..c0d0eff
--- /dev/null
+++ b/src/bin/pg_test_fsync/t/001_basic.pl
@@ -0,0 +1,28 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use Config;
+use TestLib;
+use Test::More tests => 12;
+
+#########################################
+# Basic checks
+
+program_help_ok('pg_test_fsync');
+program_version_ok('pg_test_fsync');
+program_options_handling_ok('pg_test_fsync');
+
+#########################################
+# Test invalid option combinations
+
+command_fails_like(
+ [ 'pg_test_fsync', '--secs-per-test', 'a' ],
+ qr/\Qpg_test_fsync: error: invalid argument for option --secs-per-test\E/,
+ 'pg_test_fsync: invalid argument for option --secs-per-test');
+command_fails_like(
+ [ 'pg_test_fsync', '--secs-per-test', '0' ],
+ qr/\Qpg_test_fsync: error: --secs-per-test must be in range 1..4294967295\E/,
+ 'pg_test_fsync: --secs-per-test must be in range');