summaryrefslogtreecommitdiffstats
path: root/src/bin/scripts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:15:05 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:15:05 +0000
commit46651ce6fe013220ed397add242004d764fc0153 (patch)
tree6e5299f990f88e60174a1d3ae6e48eedd2688b2b /src/bin/scripts
parentInitial commit. (diff)
downloadpostgresql-14-46651ce6fe013220ed397add242004d764fc0153.tar.xz
postgresql-14-46651ce6fe013220ed397add242004d764fc0153.zip
Adding upstream version 14.5.upstream/14.5upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bin/scripts')
-rw-r--r--src/bin/scripts/.gitignore10
-rw-r--r--src/bin/scripts/Makefile60
-rw-r--r--src/bin/scripts/clusterdb.c289
-rw-r--r--src/bin/scripts/common.c167
-rw-r--r--src/bin/scripts/common.h26
-rw-r--r--src/bin/scripts/createdb.c290
-rw-r--r--src/bin/scripts/createuser.c383
-rw-r--r--src/bin/scripts/dropdb.c189
-rw-r--r--src/bin/scripts/dropuser.c186
-rw-r--r--src/bin/scripts/nls.mk15
-rw-r--r--src/bin/scripts/pg_isready.c241
-rw-r--r--src/bin/scripts/po/cs.po1267
-rw-r--r--src/bin/scripts/po/de.po1201
-rw-r--r--src/bin/scripts/po/el.po1173
-rw-r--r--src/bin/scripts/po/es.po1189
-rw-r--r--src/bin/scripts/po/fr.po1396
-rw-r--r--src/bin/scripts/po/ja.po1185
-rw-r--r--src/bin/scripts/po/ko.po1199
-rw-r--r--src/bin/scripts/po/ru.po1431
-rw-r--r--src/bin/scripts/po/sv.po1170
-rw-r--r--src/bin/scripts/po/tr.po1223
-rw-r--r--src/bin/scripts/po/uk.po1117
-rw-r--r--src/bin/scripts/po/zh_CN.po1147
-rw-r--r--src/bin/scripts/reindexdb.c819
-rw-r--r--src/bin/scripts/t/010_clusterdb.pl36
-rw-r--r--src/bin/scripts/t/011_clusterdb_all.pl22
-rw-r--r--src/bin/scripts/t/020_createdb.pl53
-rw-r--r--src/bin/scripts/t/040_createuser.pl37
-rw-r--r--src/bin/scripts/t/050_dropdb.pl32
-rw-r--r--src/bin/scripts/t/070_dropuser.pl26
-rw-r--r--src/bin/scripts/t/080_pg_isready.pl23
-rw-r--r--src/bin/scripts/t/090_reindexdb.pl200
-rw-r--r--src/bin/scripts/t/091_reindexdb_all.pl19
-rw-r--r--src/bin/scripts/t/100_vacuumdb.pl148
-rw-r--r--src/bin/scripts/t/101_vacuumdb_all.pl17
-rw-r--r--src/bin/scripts/t/102_vacuumdb_stages.pl38
-rw-r--r--src/bin/scripts/t/200_connstr.pl42
-rw-r--r--src/bin/scripts/vacuumdb.c1062
38 files changed, 19128 insertions, 0 deletions
diff --git a/src/bin/scripts/.gitignore b/src/bin/scripts/.gitignore
new file mode 100644
index 0000000..0f23fe0
--- /dev/null
+++ b/src/bin/scripts/.gitignore
@@ -0,0 +1,10 @@
+/clusterdb
+/createdb
+/createuser
+/dropdb
+/dropuser
+/reindexdb
+/vacuumdb
+/pg_isready
+
+/tmp_check/
diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile
new file mode 100644
index 0000000..b8d7cf2
--- /dev/null
+++ b/src/bin/scripts/Makefile
@@ -0,0 +1,60 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/scripts
+#
+# Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/bin/scripts/Makefile
+#
+#-------------------------------------------------------------------------
+
+PGFILEDESC = "PostgreSQL utility"
+PGAPPICON=win32
+
+subdir = src/bin/scripts
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAMS = createdb createuser dropdb dropuser clusterdb vacuumdb reindexdb pg_isready
+
+override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
+LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport)
+
+all: $(PROGRAMS)
+
+createdb: createdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+createuser: createuser.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+dropdb: dropdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+dropuser: dropuser.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+clusterdb: clusterdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+vacuumdb: vacuumdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+reindexdb: reindexdb.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+pg_isready: pg_isready.o common.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+
+install: all installdirs
+ $(INSTALL_PROGRAM) createdb$(X) '$(DESTDIR)$(bindir)'/createdb$(X)
+ $(INSTALL_PROGRAM) dropdb$(X) '$(DESTDIR)$(bindir)'/dropdb$(X)
+ $(INSTALL_PROGRAM) createuser$(X) '$(DESTDIR)$(bindir)'/createuser$(X)
+ $(INSTALL_PROGRAM) dropuser$(X) '$(DESTDIR)$(bindir)'/dropuser$(X)
+ $(INSTALL_PROGRAM) clusterdb$(X) '$(DESTDIR)$(bindir)'/clusterdb$(X)
+ $(INSTALL_PROGRAM) vacuumdb$(X) '$(DESTDIR)$(bindir)'/vacuumdb$(X)
+ $(INSTALL_PROGRAM) reindexdb$(X) '$(DESTDIR)$(bindir)'/reindexdb$(X)
+ $(INSTALL_PROGRAM) pg_isready$(X) '$(DESTDIR)$(bindir)'/pg_isready$(X)
+
+installdirs:
+ $(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+ rm -f $(addprefix '$(DESTDIR)$(bindir)'/, $(addsuffix $(X), $(PROGRAMS)))
+
+clean distclean maintainer-clean:
+ rm -f $(addsuffix $(X), $(PROGRAMS)) $(addsuffix .o, $(PROGRAMS))
+ rm -f common.o $(WIN32RES)
+ rm -rf tmp_check
+
+check:
+ $(prove_check)
+
+installcheck:
+ $(prove_installcheck)
diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c
new file mode 100644
index 0000000..fc771ee
--- /dev/null
+++ b/src/bin/scripts/clusterdb.c
@@ -0,0 +1,289 @@
+/*-------------------------------------------------------------------------
+ *
+ * clusterdb
+ *
+ * Portions Copyright (c) 2002-2021, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/clusterdb.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.h"
+#include "fe_utils/cancel.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/query_utils.h"
+#include "fe_utils/simple_list.h"
+#include "fe_utils/string_utils.h"
+
+
+static void cluster_one_database(const ConnParams *cparams, const char *table,
+ const char *progname, bool verbose, bool echo);
+static void cluster_all_databases(ConnParams *cparams, const char *progname,
+ bool verbose, bool echo, bool quiet);
+static void help(const char *progname);
+
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"dbname", required_argument, NULL, 'd'},
+ {"all", no_argument, NULL, 'a'},
+ {"table", required_argument, NULL, 't'},
+ {"verbose", no_argument, NULL, 'v'},
+ {"maintenance-db", required_argument, NULL, 2},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+
+ const char *dbname = NULL;
+ const char *maintenance_db = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ bool quiet = false;
+ bool alldb = false;
+ bool verbose = false;
+ SimpleStringList tables = {NULL, NULL};
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "clusterdb", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:wWeqd:at:v", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 'd':
+ dbname = pg_strdup(optarg);
+ break;
+ case 'a':
+ alldb = true;
+ break;
+ case 't':
+ simple_string_list_append(&tables, optarg);
+ break;
+ case 'v':
+ verbose = true;
+ break;
+ case 2:
+ maintenance_db = pg_strdup(optarg);
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ /*
+ * Non-option argument specifies database name as long as it wasn't
+ * already specified with -d / --dbname
+ */
+ if (optind < argc && dbname == NULL)
+ {
+ dbname = argv[optind];
+ optind++;
+ }
+
+ if (optind < argc)
+ {
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ /* fill cparams except for dbname, which is set below */
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ setup_cancel_handler(NULL);
+
+ if (alldb)
+ {
+ if (dbname)
+ {
+ pg_log_error("cannot cluster all databases and a specific one at the same time");
+ exit(1);
+ }
+
+ if (tables.head != NULL)
+ {
+ pg_log_error("cannot cluster specific table(s) in all databases");
+ exit(1);
+ }
+
+ cparams.dbname = maintenance_db;
+
+ cluster_all_databases(&cparams, progname, verbose, echo, quiet);
+ }
+ else
+ {
+ if (dbname == NULL)
+ {
+ if (getenv("PGDATABASE"))
+ dbname = getenv("PGDATABASE");
+ else if (getenv("PGUSER"))
+ dbname = getenv("PGUSER");
+ else
+ dbname = get_user_name_or_exit(progname);
+ }
+
+ cparams.dbname = dbname;
+
+ if (tables.head != NULL)
+ {
+ SimpleStringListCell *cell;
+
+ for (cell = tables.head; cell; cell = cell->next)
+ {
+ cluster_one_database(&cparams, cell->val,
+ progname, verbose, echo);
+ }
+ }
+ else
+ cluster_one_database(&cparams, NULL,
+ progname, verbose, echo);
+ }
+
+ exit(0);
+}
+
+
+static void
+cluster_one_database(const ConnParams *cparams, const char *table,
+ const char *progname, bool verbose, bool echo)
+{
+ PQExpBufferData sql;
+
+ PGconn *conn;
+
+ conn = connectDatabase(cparams, progname, echo, false, false);
+
+ initPQExpBuffer(&sql);
+
+ appendPQExpBufferStr(&sql, "CLUSTER");
+ if (verbose)
+ appendPQExpBufferStr(&sql, " VERBOSE");
+ if (table)
+ {
+ appendPQExpBufferChar(&sql, ' ');
+ appendQualifiedRelation(&sql, table, conn, echo);
+ }
+ appendPQExpBufferChar(&sql, ';');
+
+ if (!executeMaintenanceCommand(conn, sql.data, echo))
+ {
+ if (table)
+ pg_log_error("clustering of table \"%s\" in database \"%s\" failed: %s",
+ table, PQdb(conn), PQerrorMessage(conn));
+ else
+ pg_log_error("clustering of database \"%s\" failed: %s",
+ PQdb(conn), PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+ PQfinish(conn);
+ termPQExpBuffer(&sql);
+}
+
+
+static void
+cluster_all_databases(ConnParams *cparams, const char *progname,
+ bool verbose, bool echo, bool quiet)
+{
+ PGconn *conn;
+ PGresult *result;
+ int i;
+
+ conn = connectMaintenanceDatabase(cparams, progname, echo);
+ result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;", echo);
+ PQfinish(conn);
+
+ for (i = 0; i < PQntuples(result); i++)
+ {
+ char *dbname = PQgetvalue(result, i, 0);
+
+ if (!quiet)
+ {
+ printf(_("%s: clustering database \"%s\"\n"), progname, dbname);
+ fflush(stdout);
+ }
+
+ cparams->override_dbname = dbname;
+
+ cluster_one_database(cparams, NULL, progname, verbose, echo);
+ }
+
+ PQclear(result);
+}
+
+
+static void
+help(const char *progname)
+{
+ printf(_("%s clusters all previously clustered tables in a database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [DBNAME]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -a, --all cluster all databases\n"));
+ printf(_(" -d, --dbname=DBNAME database to cluster\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -q, --quiet don't write any messages\n"));
+ printf(_(" -t, --table=TABLE cluster specific table(s) only\n"));
+ printf(_(" -v, --verbose write a lot of output\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_(" --maintenance-db=DBNAME alternate maintenance database\n"));
+ printf(_("\nRead the description of the SQL command CLUSTER for details.\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/common.c b/src/bin/scripts/common.c
new file mode 100644
index 0000000..79cdc6c
--- /dev/null
+++ b/src/bin/scripts/common.c
@@ -0,0 +1,167 @@
+/*-------------------------------------------------------------------------
+ *
+ * common.c
+ * Common support routines for bin/scripts/
+ *
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/common.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+
+#include <signal.h>
+#include <unistd.h>
+
+#include "common.h"
+#include "common/connect.h"
+#include "common/logging.h"
+#include "common/string.h"
+#include "fe_utils/cancel.h"
+#include "fe_utils/query_utils.h"
+#include "fe_utils/string_utils.h"
+
+/*
+ * Split TABLE[(COLUMNS)] into TABLE and [(COLUMNS)] portions. When you
+ * finish using them, pg_free(*table). *columns is a pointer into "spec",
+ * possibly to its NUL terminator.
+ */
+void
+splitTableColumnsSpec(const char *spec, int encoding,
+ char **table, const char **columns)
+{
+ bool inquotes = false;
+ const char *cp = spec;
+
+ /*
+ * Find the first '(' not identifier-quoted. Based on
+ * dequote_downcase_identifier().
+ */
+ while (*cp && (*cp != '(' || inquotes))
+ {
+ if (*cp == '"')
+ {
+ if (inquotes && cp[1] == '"')
+ cp++; /* pair does not affect quoting */
+ else
+ inquotes = !inquotes;
+ cp++;
+ }
+ else
+ cp += PQmblenBounded(cp, encoding);
+ }
+ *table = pnstrdup(spec, cp - spec);
+ *columns = cp;
+}
+
+/*
+ * Break apart TABLE[(COLUMNS)] of "spec". With the reset_val of search_path
+ * in effect, have regclassin() interpret the TABLE portion. Append to "buf"
+ * the qualified name of TABLE, followed by any (COLUMNS). Exit on failure.
+ * We use this to interpret --table=foo under the search path psql would get,
+ * in advance of "ANALYZE public.foo" under the always-secure search path.
+ */
+void
+appendQualifiedRelation(PQExpBuffer buf, const char *spec,
+ PGconn *conn, bool echo)
+{
+ char *table;
+ const char *columns;
+ PQExpBufferData sql;
+ PGresult *res;
+ int ntups;
+
+ splitTableColumnsSpec(spec, PQclientEncoding(conn), &table, &columns);
+
+ /*
+ * Query must remain ABSOLUTELY devoid of unqualified names. This would
+ * be unnecessary given a regclassin() variant taking a search_path
+ * argument.
+ */
+ initPQExpBuffer(&sql);
+ appendPQExpBufferStr(&sql,
+ "SELECT c.relname, ns.nspname\n"
+ " FROM pg_catalog.pg_class c,"
+ " pg_catalog.pg_namespace ns\n"
+ " WHERE c.relnamespace OPERATOR(pg_catalog.=) ns.oid\n"
+ " AND c.oid OPERATOR(pg_catalog.=) ");
+ appendStringLiteralConn(&sql, table, conn);
+ appendPQExpBufferStr(&sql, "::pg_catalog.regclass;");
+
+ executeCommand(conn, "RESET search_path;", echo);
+
+ /*
+ * One row is a typical result, as is a nonexistent relation ERROR.
+ * regclassin() unconditionally accepts all-digits input as an OID; if no
+ * relation has that OID; this query returns no rows. Catalog corruption
+ * might elicit other row counts.
+ */
+ res = executeQuery(conn, sql.data, echo);
+ ntups = PQntuples(res);
+ if (ntups != 1)
+ {
+ pg_log_error(ngettext("query returned %d row instead of one: %s",
+ "query returned %d rows instead of one: %s",
+ ntups),
+ ntups, sql.data);
+ PQfinish(conn);
+ exit(1);
+ }
+ appendPQExpBufferStr(buf,
+ fmtQualifiedId(PQgetvalue(res, 0, 1),
+ PQgetvalue(res, 0, 0)));
+ appendPQExpBufferStr(buf, columns);
+ PQclear(res);
+ termPQExpBuffer(&sql);
+ pg_free(table);
+
+ PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL, echo));
+}
+
+
+/*
+ * Check yes/no answer in a localized way. 1=yes, 0=no, -1=neither.
+ */
+
+/* translator: abbreviation for "yes" */
+#define PG_YESLETTER gettext_noop("y")
+/* translator: abbreviation for "no" */
+#define PG_NOLETTER gettext_noop("n")
+
+bool
+yesno_prompt(const char *question)
+{
+ char prompt[256];
+
+ /*------
+ translator: This is a question followed by the translated options for
+ "yes" and "no". */
+ snprintf(prompt, sizeof(prompt), _("%s (%s/%s) "),
+ _(question), _(PG_YESLETTER), _(PG_NOLETTER));
+
+ for (;;)
+ {
+ char *resp;
+
+ resp = simple_prompt(prompt, true);
+
+ if (strcmp(resp, _(PG_YESLETTER)) == 0)
+ {
+ free(resp);
+ return true;
+ }
+ if (strcmp(resp, _(PG_NOLETTER)) == 0)
+ {
+ free(resp);
+ return false;
+ }
+ free(resp);
+
+ printf(_("Please answer \"%s\" or \"%s\".\n"),
+ _(PG_YESLETTER), _(PG_NOLETTER));
+ }
+}
diff --git a/src/bin/scripts/common.h b/src/bin/scripts/common.h
new file mode 100644
index 0000000..ddd8f35
--- /dev/null
+++ b/src/bin/scripts/common.h
@@ -0,0 +1,26 @@
+/*
+ * common.h
+ * Common support routines for bin/scripts/
+ *
+ * Copyright (c) 2003-2021, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/common.h
+ */
+#ifndef COMMON_H
+#define COMMON_H
+
+#include "common/username.h"
+#include "fe_utils/connect_utils.h"
+#include "getopt_long.h" /* pgrminclude ignore */
+#include "libpq-fe.h"
+#include "pqexpbuffer.h" /* pgrminclude ignore */
+
+extern void splitTableColumnsSpec(const char *spec, int encoding,
+ char **table, const char **columns);
+
+extern void appendQualifiedRelation(PQExpBuffer buf, const char *name,
+ PGconn *conn, bool echo);
+
+extern bool yesno_prompt(const char *question);
+
+#endif /* COMMON_H */
diff --git a/src/bin/scripts/createdb.c b/src/bin/scripts/createdb.c
new file mode 100644
index 0000000..041454f
--- /dev/null
+++ b/src/bin/scripts/createdb.c
@@ -0,0 +1,290 @@
+/*-------------------------------------------------------------------------
+ *
+ * createdb
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/createdb.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres_fe.h"
+
+#include "common.h"
+#include "common/logging.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/string_utils.h"
+
+
+static void help(const char *progname);
+
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"owner", required_argument, NULL, 'O'},
+ {"tablespace", required_argument, NULL, 'D'},
+ {"template", required_argument, NULL, 'T'},
+ {"encoding", required_argument, NULL, 'E'},
+ {"lc-collate", required_argument, NULL, 1},
+ {"lc-ctype", required_argument, NULL, 2},
+ {"locale", required_argument, NULL, 'l'},
+ {"maintenance-db", required_argument, NULL, 3},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+
+ const char *dbname = NULL;
+ const char *maintenance_db = NULL;
+ char *comment = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ char *owner = NULL;
+ char *tablespace = NULL;
+ char *template = NULL;
+ char *encoding = NULL;
+ char *lc_collate = NULL;
+ char *lc_ctype = NULL;
+ char *locale = NULL;
+
+ PQExpBufferData sql;
+
+ PGconn *conn;
+ PGresult *result;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "createdb", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:wWeO:D:T:E:l:", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'O':
+ owner = pg_strdup(optarg);
+ break;
+ case 'D':
+ tablespace = pg_strdup(optarg);
+ break;
+ case 'T':
+ template = pg_strdup(optarg);
+ break;
+ case 'E':
+ encoding = pg_strdup(optarg);
+ break;
+ case 1:
+ lc_collate = pg_strdup(optarg);
+ break;
+ case 2:
+ lc_ctype = pg_strdup(optarg);
+ break;
+ case 'l':
+ locale = pg_strdup(optarg);
+ break;
+ case 3:
+ maintenance_db = pg_strdup(optarg);
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ switch (argc - optind)
+ {
+ case 0:
+ break;
+ case 1:
+ dbname = argv[optind];
+ break;
+ case 2:
+ dbname = argv[optind];
+ comment = argv[optind + 1];
+ break;
+ default:
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind + 2]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (locale)
+ {
+ if (lc_ctype)
+ {
+ pg_log_error("only one of --locale and --lc-ctype can be specified");
+ exit(1);
+ }
+ if (lc_collate)
+ {
+ pg_log_error("only one of --locale and --lc-collate can be specified");
+ exit(1);
+ }
+ lc_ctype = locale;
+ lc_collate = locale;
+ }
+
+ if (encoding)
+ {
+ if (pg_char_to_encoding(encoding) < 0)
+ {
+ pg_log_error("\"%s\" is not a valid encoding name", encoding);
+ exit(1);
+ }
+ }
+
+ if (dbname == NULL)
+ {
+ if (getenv("PGDATABASE"))
+ dbname = getenv("PGDATABASE");
+ else if (getenv("PGUSER"))
+ dbname = getenv("PGUSER");
+ else
+ dbname = get_user_name_or_exit(progname);
+ }
+
+ /* No point in trying to use postgres db when creating postgres db. */
+ if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0)
+ maintenance_db = "template1";
+
+ cparams.dbname = maintenance_db;
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ conn = connectMaintenanceDatabase(&cparams, progname, echo);
+
+ initPQExpBuffer(&sql);
+
+ appendPQExpBuffer(&sql, "CREATE DATABASE %s",
+ fmtId(dbname));
+
+ if (owner)
+ appendPQExpBuffer(&sql, " OWNER %s", fmtId(owner));
+ if (tablespace)
+ appendPQExpBuffer(&sql, " TABLESPACE %s", fmtId(tablespace));
+ if (encoding)
+ {
+ appendPQExpBufferStr(&sql, " ENCODING ");
+ appendStringLiteralConn(&sql, encoding, conn);
+ }
+ if (template)
+ appendPQExpBuffer(&sql, " TEMPLATE %s", fmtId(template));
+ if (lc_collate)
+ {
+ appendPQExpBufferStr(&sql, " LC_COLLATE ");
+ appendStringLiteralConn(&sql, lc_collate, conn);
+ }
+ if (lc_ctype)
+ {
+ appendPQExpBufferStr(&sql, " LC_CTYPE ");
+ appendStringLiteralConn(&sql, lc_ctype, conn);
+ }
+
+ appendPQExpBufferChar(&sql, ';');
+
+ if (echo)
+ printf("%s\n", sql.data);
+ result = PQexec(conn, sql.data);
+
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("database creation failed: %s", PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(result);
+
+ if (comment)
+ {
+ printfPQExpBuffer(&sql, "COMMENT ON DATABASE %s IS ", fmtId(dbname));
+ appendStringLiteralConn(&sql, comment, conn);
+ appendPQExpBufferChar(&sql, ';');
+
+ if (echo)
+ printf("%s\n", sql.data);
+ result = PQexec(conn, sql.data);
+
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("comment creation failed (database was created): %s",
+ PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(result);
+ }
+
+ PQfinish(conn);
+
+ exit(0);
+}
+
+
+static void
+help(const char *progname)
+{
+ printf(_("%s creates a PostgreSQL database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [DBNAME] [DESCRIPTION]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -D, --tablespace=TABLESPACE default tablespace for the database\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -E, --encoding=ENCODING encoding for the database\n"));
+ printf(_(" -l, --locale=LOCALE locale settings for the database\n"));
+ printf(_(" --lc-collate=LOCALE LC_COLLATE setting for the database\n"));
+ printf(_(" --lc-ctype=LOCALE LC_CTYPE setting for the database\n"));
+ printf(_(" -O, --owner=OWNER database user to own the new database\n"));
+ printf(_(" -T, --template=TEMPLATE template database to copy\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_(" --maintenance-db=DBNAME alternate maintenance database\n"));
+ printf(_("\nBy default, a database with the same name as the current user is created.\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
new file mode 100644
index 0000000..ef7e0e5
--- /dev/null
+++ b/src/bin/scripts/createuser.c
@@ -0,0 +1,383 @@
+/*-------------------------------------------------------------------------
+ *
+ * createuser
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/createuser.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.h"
+#include "common/string.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/simple_list.h"
+#include "fe_utils/string_utils.h"
+
+
+static void help(const char *progname);
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"role", required_argument, NULL, 'g'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"createdb", no_argument, NULL, 'd'},
+ {"no-createdb", no_argument, NULL, 'D'},
+ {"superuser", no_argument, NULL, 's'},
+ {"no-superuser", no_argument, NULL, 'S'},
+ {"createrole", no_argument, NULL, 'r'},
+ {"no-createrole", no_argument, NULL, 'R'},
+ {"inherit", no_argument, NULL, 'i'},
+ {"no-inherit", no_argument, NULL, 'I'},
+ {"login", no_argument, NULL, 'l'},
+ {"no-login", no_argument, NULL, 'L'},
+ {"replication", no_argument, NULL, 1},
+ {"no-replication", no_argument, NULL, 2},
+ {"interactive", no_argument, NULL, 3},
+ {"connection-limit", required_argument, NULL, 'c'},
+ {"pwprompt", no_argument, NULL, 'P'},
+ {"encrypted", no_argument, NULL, 'E'},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+ const char *newuser = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ SimpleStringList roles = {NULL, NULL};
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ bool interactive = false;
+ int conn_limit = -2; /* less than minimum valid value */
+ bool pwprompt = false;
+ char *newpassword = NULL;
+
+ /* Tri-valued variables. */
+ enum trivalue createdb = TRI_DEFAULT,
+ superuser = TRI_DEFAULT,
+ createrole = TRI_DEFAULT,
+ inherit = TRI_DEFAULT,
+ login = TRI_DEFAULT,
+ replication = TRI_DEFAULT;
+
+ PQExpBufferData sql;
+
+ PGconn *conn;
+ PGresult *result;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "createuser", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:g:wWedDsSrRiIlLc:PE",
+ long_options, &optindex)) != -1)
+ {
+ char *endptr;
+
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'g':
+ simple_string_list_append(&roles, optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'd':
+ createdb = TRI_YES;
+ break;
+ case 'D':
+ createdb = TRI_NO;
+ break;
+ case 's':
+ superuser = TRI_YES;
+ break;
+ case 'S':
+ superuser = TRI_NO;
+ break;
+ case 'r':
+ createrole = TRI_YES;
+ break;
+ case 'R':
+ createrole = TRI_NO;
+ break;
+ case 'i':
+ inherit = TRI_YES;
+ break;
+ case 'I':
+ inherit = TRI_NO;
+ break;
+ case 'l':
+ login = TRI_YES;
+ break;
+ case 'L':
+ login = TRI_NO;
+ break;
+ case 'c':
+ conn_limit = strtol(optarg, &endptr, 10);
+ if (*endptr != '\0' || conn_limit < -1) /* minimum valid value */
+ {
+ pg_log_error("invalid value for --connection-limit: %s",
+ optarg);
+ exit(1);
+ }
+ break;
+ case 'P':
+ pwprompt = true;
+ break;
+ case 'E':
+ /* no-op, accepted for backward compatibility */
+ break;
+ case 1:
+ replication = TRI_YES;
+ break;
+ case 2:
+ replication = TRI_NO;
+ break;
+ case 3:
+ interactive = true;
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ switch (argc - optind)
+ {
+ case 0:
+ break;
+ case 1:
+ newuser = argv[optind];
+ break;
+ default:
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind + 1]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (newuser == NULL)
+ {
+ if (interactive)
+ {
+ newuser = simple_prompt("Enter name of role to add: ", true);
+ }
+ else
+ {
+ if (getenv("PGUSER"))
+ newuser = getenv("PGUSER");
+ else
+ newuser = get_user_name_or_exit(progname);
+ }
+ }
+
+ if (pwprompt)
+ {
+ char *pw2;
+
+ newpassword = simple_prompt("Enter password for new role: ", false);
+ pw2 = simple_prompt("Enter it again: ", false);
+ if (strcmp(newpassword, pw2) != 0)
+ {
+ fprintf(stderr, _("Passwords didn't match.\n"));
+ exit(1);
+ }
+ free(pw2);
+ }
+
+ if (superuser == 0)
+ {
+ if (interactive && yesno_prompt("Shall the new role be a superuser?"))
+ superuser = TRI_YES;
+ else
+ superuser = TRI_NO;
+ }
+
+ if (superuser == TRI_YES)
+ {
+ /* Not much point in trying to restrict a superuser */
+ createdb = TRI_YES;
+ createrole = TRI_YES;
+ }
+
+ if (createdb == 0)
+ {
+ if (interactive && yesno_prompt("Shall the new role be allowed to create databases?"))
+ createdb = TRI_YES;
+ else
+ createdb = TRI_NO;
+ }
+
+ if (createrole == 0)
+ {
+ if (interactive && yesno_prompt("Shall the new role be allowed to create more new roles?"))
+ createrole = TRI_YES;
+ else
+ createrole = TRI_NO;
+ }
+
+ if (inherit == 0)
+ inherit = TRI_YES;
+
+ if (login == 0)
+ login = TRI_YES;
+
+ cparams.dbname = NULL; /* this program lacks any dbname option... */
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ conn = connectMaintenanceDatabase(&cparams, progname, echo);
+
+ initPQExpBuffer(&sql);
+
+ printfPQExpBuffer(&sql, "CREATE ROLE %s", fmtId(newuser));
+ if (newpassword)
+ {
+ char *encrypted_password;
+
+ appendPQExpBufferStr(&sql, " PASSWORD ");
+
+ encrypted_password = PQencryptPasswordConn(conn,
+ newpassword,
+ newuser,
+ NULL);
+ if (!encrypted_password)
+ {
+ pg_log_error("password encryption failed: %s",
+ PQerrorMessage(conn));
+ exit(1);
+ }
+ appendStringLiteralConn(&sql, encrypted_password, conn);
+ PQfreemem(encrypted_password);
+ }
+ if (superuser == TRI_YES)
+ appendPQExpBufferStr(&sql, " SUPERUSER");
+ if (superuser == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOSUPERUSER");
+ if (createdb == TRI_YES)
+ appendPQExpBufferStr(&sql, " CREATEDB");
+ if (createdb == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOCREATEDB");
+ if (createrole == TRI_YES)
+ appendPQExpBufferStr(&sql, " CREATEROLE");
+ if (createrole == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOCREATEROLE");
+ if (inherit == TRI_YES)
+ appendPQExpBufferStr(&sql, " INHERIT");
+ if (inherit == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOINHERIT");
+ if (login == TRI_YES)
+ appendPQExpBufferStr(&sql, " LOGIN");
+ if (login == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOLOGIN");
+ if (replication == TRI_YES)
+ appendPQExpBufferStr(&sql, " REPLICATION");
+ if (replication == TRI_NO)
+ appendPQExpBufferStr(&sql, " NOREPLICATION");
+ if (conn_limit >= -1)
+ appendPQExpBuffer(&sql, " CONNECTION LIMIT %d", conn_limit);
+ if (roles.head != NULL)
+ {
+ SimpleStringListCell *cell;
+
+ appendPQExpBufferStr(&sql, " IN ROLE ");
+
+ for (cell = roles.head; cell; cell = cell->next)
+ {
+ if (cell->next)
+ appendPQExpBuffer(&sql, "%s,", fmtId(cell->val));
+ else
+ appendPQExpBufferStr(&sql, fmtId(cell->val));
+ }
+ }
+ appendPQExpBufferChar(&sql, ';');
+
+ if (echo)
+ printf("%s\n", sql.data);
+ result = PQexec(conn, sql.data);
+
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("creation of new role failed: %s", PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(result);
+ PQfinish(conn);
+ exit(0);
+}
+
+
+static void
+help(const char *progname)
+{
+ printf(_("%s creates a new PostgreSQL role.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [ROLENAME]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -c, --connection-limit=N connection limit for role (default: no limit)\n"));
+ printf(_(" -d, --createdb role can create new databases\n"));
+ printf(_(" -D, --no-createdb role cannot create databases (default)\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -g, --role=ROLE new role will be a member of this role\n"));
+ printf(_(" -i, --inherit role inherits privileges of roles it is a\n"
+ " member of (default)\n"));
+ printf(_(" -I, --no-inherit role does not inherit privileges\n"));
+ printf(_(" -l, --login role can login (default)\n"));
+ printf(_(" -L, --no-login role cannot login\n"));
+ printf(_(" -P, --pwprompt assign a password to new role\n"));
+ printf(_(" -r, --createrole role can create new roles\n"));
+ printf(_(" -R, --no-createrole role cannot create roles (default)\n"));
+ printf(_(" -s, --superuser role will be superuser\n"));
+ printf(_(" -S, --no-superuser role will not be superuser (default)\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" --interactive prompt for missing role name and attributes rather\n"
+ " than using defaults\n"));
+ printf(_(" --replication role can initiate replication\n"));
+ printf(_(" --no-replication role cannot initiate replication\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as (not the one to create)\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/dropdb.c b/src/bin/scripts/dropdb.c
new file mode 100644
index 0000000..b154ed1
--- /dev/null
+++ b/src/bin/scripts/dropdb.c
@@ -0,0 +1,189 @@
+/*-------------------------------------------------------------------------
+ *
+ * dropdb
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/dropdb.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/string_utils.h"
+
+
+static void help(const char *progname);
+
+
+int
+main(int argc, char *argv[])
+{
+ static int if_exists = 0;
+
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"interactive", no_argument, NULL, 'i'},
+ {"if-exists", no_argument, &if_exists, 1},
+ {"maintenance-db", required_argument, NULL, 2},
+ {"force", no_argument, NULL, 'f'},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+
+ char *dbname = NULL;
+ char *maintenance_db = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ bool interactive = false;
+ bool force = false;
+
+ PQExpBufferData sql;
+
+ PGconn *conn;
+ PGresult *result;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "dropdb", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:wWeif", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'i':
+ interactive = true;
+ break;
+ case 'f':
+ force = true;
+ break;
+ case 0:
+ /* this covers the long options */
+ break;
+ case 2:
+ maintenance_db = pg_strdup(optarg);
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ switch (argc - optind)
+ {
+ case 0:
+ pg_log_error("missing required argument database name");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ case 1:
+ dbname = argv[optind];
+ break;
+ default:
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind + 1]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (interactive)
+ {
+ printf(_("Database \"%s\" will be permanently removed.\n"), dbname);
+ if (!yesno_prompt("Are you sure?"))
+ exit(0);
+ }
+
+ initPQExpBuffer(&sql);
+
+ appendPQExpBuffer(&sql, "DROP DATABASE %s%s%s;",
+ (if_exists ? "IF EXISTS " : ""),
+ fmtId(dbname),
+ force ? " WITH (FORCE)" : "");
+
+ /* Avoid trying to drop postgres db while we are connected to it. */
+ if (maintenance_db == NULL && strcmp(dbname, "postgres") == 0)
+ maintenance_db = "template1";
+
+ cparams.dbname = maintenance_db;
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ conn = connectMaintenanceDatabase(&cparams, progname, echo);
+
+ if (echo)
+ printf("%s\n", sql.data);
+ result = PQexec(conn, sql.data);
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("database removal failed: %s", PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(result);
+ PQfinish(conn);
+ exit(0);
+}
+
+
+static void
+help(const char *progname)
+{
+ printf(_("%s removes a PostgreSQL database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... DBNAME\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -f, --force try to terminate other connections before dropping\n"));
+ printf(_(" -i, --interactive prompt before deleting anything\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" --if-exists don't report error if database doesn't exist\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_(" --maintenance-db=DBNAME alternate maintenance database\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/dropuser.c b/src/bin/scripts/dropuser.c
new file mode 100644
index 0000000..61b8557
--- /dev/null
+++ b/src/bin/scripts/dropuser.c
@@ -0,0 +1,186 @@
+/*-------------------------------------------------------------------------
+ *
+ * dropuser
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/dropuser.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.h"
+#include "common/string.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/string_utils.h"
+
+
+static void help(const char *progname);
+
+
+int
+main(int argc, char *argv[])
+{
+ static int if_exists = 0;
+
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"interactive", no_argument, NULL, 'i'},
+ {"if-exists", no_argument, &if_exists, 1},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+
+ char *dropuser = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ bool interactive = false;
+
+ PQExpBufferData sql;
+
+ PGconn *conn;
+ PGresult *result;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "dropuser", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:wWei", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'i':
+ interactive = true;
+ break;
+ case 0:
+ /* this covers the long options */
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ switch (argc - optind)
+ {
+ case 0:
+ break;
+ case 1:
+ dropuser = argv[optind];
+ break;
+ default:
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind + 1]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (dropuser == NULL)
+ {
+ if (interactive)
+ {
+ dropuser = simple_prompt("Enter name of role to drop: ", true);
+ }
+ else
+ {
+ pg_log_error("missing required argument role name");
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ if (interactive)
+ {
+ printf(_("Role \"%s\" will be permanently removed.\n"), dropuser);
+ if (!yesno_prompt("Are you sure?"))
+ exit(0);
+ }
+
+ cparams.dbname = NULL; /* this program lacks any dbname option... */
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ conn = connectMaintenanceDatabase(&cparams, progname, echo);
+
+ initPQExpBuffer(&sql);
+ appendPQExpBuffer(&sql, "DROP ROLE %s%s;",
+ (if_exists ? "IF EXISTS " : ""), fmtId(dropuser));
+
+ if (echo)
+ printf("%s\n", sql.data);
+ result = PQexec(conn, sql.data);
+
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("removal of role \"%s\" failed: %s",
+ dropuser, PQerrorMessage(conn));
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(result);
+ PQfinish(conn);
+ exit(0);
+}
+
+
+static void
+help(const char *progname)
+{
+ printf(_("%s removes a PostgreSQL role.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [ROLENAME]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -i, --interactive prompt before deleting anything, and prompt for\n"
+ " role name if not specified\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" --if-exists don't report error if user doesn't exist\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as (not the one to drop)\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/nls.mk b/src/bin/scripts/nls.mk
new file mode 100644
index 0000000..46eb031
--- /dev/null
+++ b/src/bin/scripts/nls.mk
@@ -0,0 +1,15 @@
+# src/bin/scripts/nls.mk
+CATALOG_NAME = pgscripts
+AVAIL_LANGUAGES = cs de el es fr ja ko ru sv tr uk zh_CN
+GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) \
+ createdb.c createuser.c \
+ dropdb.c dropuser.c \
+ clusterdb.c vacuumdb.c reindexdb.c \
+ pg_isready.c \
+ common.c \
+ ../../fe_utils/parallel_slot.c \
+ ../../fe_utils/cancel.c ../../fe_utils/print.c \
+ ../../fe_utils/connect_utils.c ../../fe_utils/query_utils.c \
+ ../../common/fe_memutils.c ../../common/username.c
+GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) simple_prompt yesno_prompt
+GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS)
diff --git a/src/bin/scripts/pg_isready.c b/src/bin/scripts/pg_isready.c
new file mode 100644
index 0000000..fc6f7b0
--- /dev/null
+++ b/src/bin/scripts/pg_isready.c
@@ -0,0 +1,241 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_isready --- checks the status of the PostgreSQL server
+ *
+ * Copyright (c) 2013-2021, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/pg_isready.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.h"
+#include "fe_utils/option_utils.h"
+
+#define DEFAULT_CONNECT_TIMEOUT "3"
+
+static void
+ help(const char *progname);
+
+int
+main(int argc, char **argv)
+{
+ int c;
+
+ const char *progname;
+
+ const char *pghost = NULL;
+ const char *pgport = NULL;
+ const char *pguser = NULL;
+ const char *pgdbname = NULL;
+ const char *connect_timeout = DEFAULT_CONNECT_TIMEOUT;
+
+ const char *pghost_str = NULL;
+ const char *pghostaddr_str = NULL;
+ const char *pgport_str = NULL;
+
+#define PARAMS_ARRAY_SIZE 7
+
+ const char *keywords[PARAMS_ARRAY_SIZE];
+ const char *values[PARAMS_ARRAY_SIZE];
+
+ bool quiet = false;
+
+ PGPing rv;
+ PQconninfoOption *opts = NULL;
+ PQconninfoOption *defs = NULL;
+ PQconninfoOption *opt;
+ PQconninfoOption *def;
+ char *errmsg = NULL;
+
+ /*
+ * We accept user and database as options to avoid useless errors from
+ * connecting with invalid params
+ */
+
+ static struct option long_options[] = {
+ {"dbname", required_argument, NULL, 'd'},
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"timeout", required_argument, NULL, 't'},
+ {"username", required_argument, NULL, 'U'},
+ {NULL, 0, NULL, 0}
+ };
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+ handle_help_version_opts(argc, argv, progname, help);
+
+ while ((c = getopt_long(argc, argv, "d:h:p:qt:U:", long_options, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'd':
+ pgdbname = pg_strdup(optarg);
+ break;
+ case 'h':
+ pghost = pg_strdup(optarg);
+ break;
+ case 'p':
+ pgport = pg_strdup(optarg);
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 't':
+ connect_timeout = pg_strdup(optarg);
+ break;
+ case 'U':
+ pguser = pg_strdup(optarg);
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+
+ /*
+ * We need to make sure we don't return 1 here because someone
+ * checking the return code might infer unintended meaning
+ */
+ exit(PQPING_NO_ATTEMPT);
+ }
+ }
+
+ if (optind < argc)
+ {
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+
+ /*
+ * We need to make sure we don't return 1 here because someone
+ * checking the return code might infer unintended meaning
+ */
+ exit(PQPING_NO_ATTEMPT);
+ }
+
+ keywords[0] = "host";
+ values[0] = pghost;
+ keywords[1] = "port";
+ values[1] = pgport;
+ keywords[2] = "user";
+ values[2] = pguser;
+ keywords[3] = "dbname";
+ values[3] = pgdbname;
+ keywords[4] = "connect_timeout";
+ values[4] = connect_timeout;
+ keywords[5] = "fallback_application_name";
+ values[5] = progname;
+ keywords[6] = NULL;
+ values[6] = NULL;
+
+ /*
+ * Get the host and port so we can display them in our output
+ */
+ if (pgdbname &&
+ (strncmp(pgdbname, "postgresql://", 13) == 0 ||
+ strncmp(pgdbname, "postgres://", 11) == 0 ||
+ strchr(pgdbname, '=') != NULL))
+ {
+ opts = PQconninfoParse(pgdbname, &errmsg);
+ if (opts == NULL)
+ {
+ pg_log_error("%s", errmsg);
+ exit(PQPING_NO_ATTEMPT);
+ }
+ }
+
+ defs = PQconndefaults();
+ if (defs == NULL)
+ {
+ pg_log_error("could not fetch default options");
+ exit(PQPING_NO_ATTEMPT);
+ }
+
+ for (opt = opts, def = defs; def->keyword; def++)
+ {
+ if (strcmp(def->keyword, "host") == 0)
+ {
+ if (opt && opt->val)
+ pghost_str = opt->val;
+ else if (pghost)
+ pghost_str = pghost;
+ else if (def->val)
+ pghost_str = def->val;
+ else
+ pghost_str = DEFAULT_PGSOCKET_DIR;
+ }
+ else if (strcmp(def->keyword, "hostaddr") == 0)
+ {
+ if (opt && opt->val)
+ pghostaddr_str = opt->val;
+ else if (def->val)
+ pghostaddr_str = def->val;
+ }
+ else if (strcmp(def->keyword, "port") == 0)
+ {
+ if (opt && opt->val)
+ pgport_str = opt->val;
+ else if (pgport)
+ pgport_str = pgport;
+ else if (def->val)
+ pgport_str = def->val;
+ }
+
+ if (opt)
+ opt++;
+ }
+
+ rv = PQpingParams(keywords, values, 1);
+
+ if (!quiet)
+ {
+ printf("%s:%s - ",
+ pghostaddr_str != NULL ? pghostaddr_str : pghost_str,
+ pgport_str);
+
+ switch (rv)
+ {
+ case PQPING_OK:
+ printf(_("accepting connections\n"));
+ break;
+ case PQPING_REJECT:
+ printf(_("rejecting connections\n"));
+ break;
+ case PQPING_NO_RESPONSE:
+ printf(_("no response\n"));
+ break;
+ case PQPING_NO_ATTEMPT:
+ printf(_("no attempt\n"));
+ break;
+ default:
+ printf(_("unknown\n"));
+ }
+ }
+
+ exit(rv);
+}
+
+static void
+help(const char *progname)
+{
+ printf(_("%s issues a connection check to a PostgreSQL database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]...\n"), progname);
+
+ printf(_("\nOptions:\n"));
+ printf(_(" -d, --dbname=DBNAME database name\n"));
+ printf(_(" -q, --quiet run quietly\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"), DEFAULT_CONNECT_TIMEOUT);
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/po/cs.po b/src/bin/scripts/po/cs.po
new file mode 100644
index 0000000..dead987
--- /dev/null
+++ b/src/bin/scripts/po/cs.po
@@ -0,0 +1,1267 @@
+# Czech translation of pgscripts messages.
+#
+# pgtranslation Id: pgscripts.po,v 1.3 2009/10/14 21:08:40 petere Exp $
+#
+# Karel Žák, 2001-2003, 2004.
+# Zdeněk Kotala, 2009, 2011, 2012, 2013.
+# Tomáš Vondra <tv@fuzzy.cz>, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts-cs (PostgreSQL 9.3)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-10-31 16:16+0000\n"
+"PO-Revision-Date: 2021-09-16 09:15+0200\n"
+"Last-Translator: Tomas Vondra <tv@fuzzy.cz>\n"
+"Language-Team: Czech <info@cspug.cx>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "error: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "warning: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "paměť vyčerpána\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "nelze duplikovat nulový ukazatel (interní chyba)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "nelze nalézt effective user ID %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "uživatel neexistuje"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "chyba vyhledávání jména uživatele: chybový kód %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Požadavek na zrušení byl poslán\n"
+
+#: ../../fe_utils/cancel.c:165
+msgid "Could not send cancel request: "
+msgstr "Nelze poslat požadavek na zrušení: "
+
+#: ../../fe_utils/cancel.c:210
+#, c-format
+msgid "Could not send cancel request: %s"
+msgstr "Nelze poslat požadavek na zrušení: %s"
+
+#: ../../fe_utils/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu řádka)"
+msgstr[1] "(%lu řádky)"
+msgstr[2] "(%lu řádek)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Přerušeno\n"
+
+#: ../../fe_utils/print.c:3119
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Nelze přidat hlavičku k obsahu tabulky: překročen počet sloupců %d.\n"
+
+#: ../../fe_utils/print.c:3159
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Nelze přidat buňku do obsahu tabulky: překročen celkový počet buněk %d.\n"
+
+#: ../../fe_utils/print.c:3414
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "specifikován neplatný formát výstupu (interní chyba): %d"
+
+#: clusterdb.c:110 clusterdb.c:129 createdb.c:122 createdb.c:141
+#: createuser.c:172 createuser.c:187 dropdb.c:102 dropdb.c:111 dropdb.c:119
+#: dropuser.c:93 dropuser.c:108 dropuser.c:123 pg_isready.c:95 pg_isready.c:109
+#: reindexdb.c:166 reindexdb.c:185 vacuumdb.c:225 vacuumdb.c:244
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Zkuste \"%s --help\" pro více informací.\n"
+
+#: clusterdb.c:127 createdb.c:139 createuser.c:185 dropdb.c:117 dropuser.c:106
+#: pg_isready.c:107 reindexdb.c:183 vacuumdb.c:242
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "příliš mnoho parametrů příkazové řádky (první je \"%s\")"
+
+#: clusterdb.c:146
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "nelze provést cluster ve všech databázích a zároveň specifikovat jen jednu"
+
+#: clusterdb.c:152
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "nelze provést cluster specifické tabulky ve všech databázích"
+
+#: clusterdb.c:218
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "clusterování tabulky \"%s\" v databázi \"%s\" selhalo: %s"
+
+#: clusterdb.c:221
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "clusterování databáze \"%s\" selhalo: %s"
+
+#: clusterdb.c:249
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: provádí se cluster databáze \"%s\"\n"
+
+#: clusterdb.c:265
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s vytváří cluster všech již dříve clusterovaných tabulek v databázi.\n"
+"\n"
+
+#: clusterdb.c:266 createdb.c:266 createuser.c:354 dropdb.c:170 dropuser.c:170
+#: pg_isready.c:224 reindexdb.c:750 vacuumdb.c:911
+#, c-format
+msgid "Usage:\n"
+msgstr "Použití:\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [PŘEPÍNAČ]... [DATABÁZE]\n"
+
+#: clusterdb.c:268 createdb.c:268 createuser.c:356 dropdb.c:172 dropuser.c:172
+#: pg_isready.c:227 reindexdb.c:752 vacuumdb.c:913
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Přepínače:\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all clusterovat všechny databáze\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DATABÁZE databáze pro cluster\n"
+
+#: clusterdb.c:271 createuser.c:360 dropdb.c:173 dropuser.c:173 reindexdb.c:756
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo ukazovat příkazy posílané na server\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet nevypisovat žádné zprávy\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABULKA provést cluster pro danou tabulku\n"
+
+#: clusterdb.c:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose vypisovat více informací\n"
+
+#: clusterdb.c:275 createuser.c:372 dropdb.c:176 dropuser.c:176 reindexdb.c:764
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version ukáže informaci o verzi a skončí\n"
+
+#: clusterdb.c:276 createuser.c:377 dropdb.c:178 dropuser.c:178 reindexdb.c:765
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help ukáže tuto nápovědu a skončí\n"
+
+#: clusterdb.c:277 createdb.c:279 createuser.c:378 dropdb.c:179 dropuser.c:179
+#: pg_isready.c:233 reindexdb.c:766 vacuumdb.c:934
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Parametry spojení:\n"
+
+#: clusterdb.c:278 createuser.c:379 dropdb.c:180 dropuser.c:180 reindexdb.c:767
+#: vacuumdb.c:935
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresáře se soketem\n"
+
+#: clusterdb.c:279 createuser.c:380 dropdb.c:181 dropuser.c:181 reindexdb.c:768
+#: vacuumdb.c:936
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port databázového serveru\n"
+
+#: clusterdb.c:280 dropdb.c:182 reindexdb.c:769 vacuumdb.c:937
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení se serverem\n"
+
+#: clusterdb.c:281 createuser.c:382 dropdb.c:183 dropuser.c:183 reindexdb.c:770
+#: vacuumdb.c:938
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password neptá se na heslo\n"
+
+#: clusterdb.c:282 createuser.c:383 dropdb.c:184 dropuser.c:184 reindexdb.c:771
+#: vacuumdb.c:939
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password vynutí dotaz na heslo\n"
+
+#: clusterdb.c:283 dropdb.c:185 reindexdb.c:772 vacuumdb.c:940
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME alternativní maintenance databáze\n"
+
+#: clusterdb.c:284
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Pro detaily čtěte popis SQL příkazu CLUSTER.\n"
+
+#: clusterdb.c:285 createdb.c:287 createuser.c:384 dropdb.c:186 dropuser.c:185
+#: pg_isready.c:238 reindexdb.c:774 vacuumdb.c:942
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Chyby hlašte na <%s>.\n"
+
+#: clusterdb.c:286 createdb.c:288 createuser.c:385 dropdb.c:187 dropuser.c:186
+#: pg_isready.c:239 reindexdb.c:775 vacuumdb.c:943
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s domácí stránka: <%s>\n"
+
+#: common.c:80 common.c:138
+msgid "Password: "
+msgstr "Heslo: "
+
+#: common.c:125
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "nelze navázat spojení s databází %s: nedotatek paměti"
+
+#: common.c:152
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "nelze navázat spojení s databází %s: %s"
+
+#: common.c:231 common.c:256
+#, c-format
+msgid "query failed: %s"
+msgstr "dotaz selhal: %s"
+
+#: common.c:232 common.c:257
+#, c-format
+msgid "query was: %s"
+msgstr "dotaz byl: %s"
+
+#: common.c:329
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "zpracování databáze \"%s\" selhalo: %s"
+
+#: common.c:423
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "dotaz vrátil %d řádku namísto jedné: %s"
+msgstr[1] "dotaz vrátil %d řádky namísto jedné: %s"
+msgstr[2] "dotaz vrátil %d řádek namísto jedné: %s"
+
+# translator: Make sure the (y/n) prompts match the translation of this.
+#. translator: abbreviation for "yes"
+#: common.c:447
+msgid "y"
+msgstr "a"
+
+# translator: Make sure the (y/n) prompts match the translation of this.
+#. translator: abbreviation for "no"
+#: common.c:449
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:459
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:473
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Prosím odpovězte \"%s\" nebo \"%s\".\n"
+
+#: createdb.c:149
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "--locale a --lc-ctype nelze zvolit současně"
+
+#: createdb.c:154
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "--locale a --lc-collate nelze zvolit současně"
+
+#: createdb.c:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" není platné jméno kódování znaků"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "vytvoření databáze selhalo: %s"
+
+#: createdb.c:247
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "tvorba komentáře selhala (databáze byla vytvořena): %s"
+
+#: createdb.c:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s vytvoří PostgreSQL databázi.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [PŘEPÍNAČ]... [DATABÁZE] [POPIS]\n"
+
+#: createdb.c:269
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=PROSTOR výchozí prostor tabulek pro databázi\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo ukázat příkazy posílané na server\n"
+
+#: createdb.c:271
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=KÓDOVÁNÍ kódování znaků databáze\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE nastavení locale pro databázi\n"
+
+#: createdb.c:273
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE nastavení LC_COLLATE pro databázi\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE nastavení LC_CTYPE pro databázi\n"
+
+#: createdb.c:275
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=VLASTNÍK uživatel, který má být vlastníkem nové databáze\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=ŠABLONA šablona databáze ke kopírování\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version ukáže informaci o verzi a skončí\n"
+
+#: createdb.c:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help ukáže tuto nápovědu a skončí\n"
+
+#: createdb.c:280
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresáře se soketem\n"
+
+#: createdb.c:281
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port databázového serveru\n"
+
+#: createdb.c:282
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení se serverem\n"
+
+#: createdb.c:283
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password neptá se na heslo\n"
+
+#: createdb.c:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password vynutí dotaz na heslo\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME alternativní maintenance databáze\n"
+
+#: createdb.c:286
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Implicitně je vytvořena databáze stejného jména jako je jméno aktuálního uživatele.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "chybná hodnota pro volbu --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Vložte jméno role, kterou chete přidat: "
+
+#: createuser.c:212
+msgid "Enter password for new role: "
+msgstr "Vložte heslo nové role: "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Zadejte znova: "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Hesla se neshodují.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "Má být nová role superuživatel?"
+
+#: createuser.c:240
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Měla by mít nová role právo vytvářet databáze?"
+
+#: createuser.c:248
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Měla by mít nová role právo vytvářet další nové role?"
+
+#: createuser.c:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "šifrování hesla selhalo: %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "tvorba nové role selhala: %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s vytvoří novou PostgreSQL roli.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [PŘEPÍNAČ]... [JMÉNO ROLE]\n"
+
+#: createuser.c:357
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N limit počtu konexí pro role (implicitně: bez limitu)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb role může vytvářet nové databáze\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb role nemůže vytvářet nové databáze (výchozí)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE nová role bude členem této role\n"
+
+#: createuser.c:362
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit role dědí práva rolí, kterých je členem\n"
+" (implicitně)\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit role nedědí práva\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login role se může přihlásit (implicitně)\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login role se nemůže přihlásit\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt nastavit heslo pro novou roli\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole role může vytvářet nové role\n"
+
+#: createuser.c:369
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole role nemůže vytvářet nové role (výchozí)\n"
+
+#: createuser.c:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser role bude superuživatel\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser role nebude superuživatel (výchozí)\n"
+
+#: createuser.c:373
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive zeptej se na chybějící jméno role a atributy namísto\n"
+" použití výchozích hodnot\n"
+
+#: createuser.c:375
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication role může inicializovat replikaci\n"
+
+#: createuser.c:376
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication role nemůže inicializovat replikaci\n"
+
+#: createuser.c:381
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení (ne pro tvorbu)\n"
+
+#: dropdb.c:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "chybí vyžadovaný parametr jméno databáze"
+
+#: dropdb.c:125
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Databáze \"%s\" bude trvale odstraněna.\n"
+
+#: dropdb.c:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "Určitě?"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "odstraňování databáze selhalo: %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s odstraňuje PostgreSQL databázi.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [PŘEPÍNAČ]... DATABÁZE\n"
+
+#: dropdb.c:174
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force pokus se přerušit ostatní spojení před smazáním\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive zeptej se před smazáním čehokoli\n"
+
+#: dropdb.c:177
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists nevypisuj chybu pokud databáze neexistuje\n"
+
+#: dropuser.c:116
+msgid "Enter name of role to drop: "
+msgstr "Vložte jméno role pro odstranění: "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "chybí povinný parametr jméno role"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Role \"%s\" bude trvale odstraněna.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "odstraňování role \"%s\" selhalo: %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s odstraňuje PostgreSQL roli.\n"
+"\n"
+
+#: dropuser.c:174
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive před smazáním čehokoliv se zeptá, a také na jméno\n"
+" role pokud není zadáno\n"
+
+#: dropuser.c:177
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists nevypisuj chybu pokud uživatel neexistuje\n"
+
+#: dropuser.c:182
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=UŽIVATEL jméno uživatele pro spojení (ne pro odstranění)\n"
+
+#: pg_isready.c:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "nelze načíst výchozí volby"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "server přijímá spojení\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "server odmítá spojení\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "žádná odpověď\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "žádný pokus\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "neznámo\n"
+
+#: pg_isready.c:223
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s provede kontrolu spojení k PostgreSQL databázi.\n"
+"\n"
+
+#: pg_isready.c:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [PŘEPÍNAČ]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DATABÁZE databáze k reindexaci\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet nevypisovat žádné zprávy\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version ukáže informaci o verzi a skončí\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help ukáže tuto nápovědu a skončí\n"
+
+#: pg_isready.c:234
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME jméno databázového serveru nebo adresáře se soketem\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port databázového serveru\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SECS počet vteřin čekání při pokusu o spojení, 0 toto omezení vypne (výchozí: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UŽIVATEL jméno uživatele pro připojení\n"
+
+#: reindexdb.c:152 vacuumdb.c:184
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "počet paralelních jobů musí být alespoň 1"
+
+#: reindexdb.c:202
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "nelze reindexovat všechny databáze a současně zvolenou databázi"
+
+#: reindexdb.c:207
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "nelze reindexovat všechny databáze a současně systemový katalog"
+
+#: reindexdb.c:212
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "nelze reindexovat vybrané schema ve všech databázích"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "nelze reindexovat vybranou tabulku ve všech databázích"
+
+#: reindexdb.c:222
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "nelze reindexovat vybraný index ve všech databázích"
+
+#: reindexdb.c:235
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "nelze reindexovat vybraná schemata a současně sytémové katalogy"
+
+#: reindexdb.c:240
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "nelze reindexovat vybranou tabulku a současně sytémové katalogy"
+
+#: reindexdb.c:245
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "nelze reindexovat vybraný index a současně sytémový katalog"
+
+#: reindexdb.c:251
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "pro reindexování systémových katalogů nelze použít více jobů"
+
+#: reindexdb.c:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "pro reindexování nelze použít více paralelních jobů"
+
+#: reindexdb.c:344 vacuumdb.c:413 vacuumdb.c:421 vacuumdb.c:428 vacuumdb.c:435
+#: vacuumdb.c:442
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "volbu \"%s\" nelze použít na serverech starších než PostgreSQL %s"
+
+#: reindexdb.c:384
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "katalogy nelze reindexovat v \"concurrent\" módu, přeskakuji."
+
+#: reindexdb.c:564
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "reindexace databáze \"%s\" selhala: %s"
+
+#: reindexdb.c:568
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexace indexu \"%s\" v databázi \"%s\" selhala: %s"
+
+#: reindexdb.c:572
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexace schematu \"%s\" v databázi \"%s\" selhala: %s"
+
+#: reindexdb.c:576
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "reindexování systémových katalogů v databázi \"%s\" selhalo: %s"
+
+#: reindexdb.c:580
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexace tabulky \"%s\" v databázi \"%s\" selhala: %s"
+
+#: reindexdb.c:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindexace databáze \"%s\"\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s vytvoří PostgreSQL databázi.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all reindexovat všechny databáze\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently reindex concurrently\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DATABÁZE databáze k reindexaci\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=JMÉNO obnovit pouze vybraný index\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM použij tento počet paralelních jobů pro reindexování\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system reindexace systémového katalogu\n"
+
+#: reindexdb.c:761
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA reindexace pouze zadaných schemat\n"
+
+#: reindexdb.c:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABULKA reidexace pouze vybranou tabulku\n"
+
+#: reindexdb.c:773
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Pro detaily čtěte popis SQL příkazu REINDEX.\n"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "příliš mnoho jobů pro tuto platformu -- zkuste %d"
+
+#: vacuumdb.c:192
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "parallel vacuum degree musí být nezáporné celé číslo"
+
+#: vacuumdb.c:212
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "minimální stáří transaction ID musí být alespoň 1"
+
+#: vacuumdb.c:220
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "minimální stáří multixact ID musí být alespoň 1"
+
+#: vacuumdb.c:252 vacuumdb.c:258 vacuumdb.c:264 vacuumdb.c:276
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "při provádění jen analyze nelze použít volbu \"%s\""
+
+#: vacuumdb.c:282
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "při provádění full vacuum nelze použít volbu \"%s\""
+
+#: vacuumdb.c:305
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "nelze provádět vacuum všech databází a zároveň specifikovat jen jednu"
+
+#: vacuumdb.c:310
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "nelze provést vacuum specifické tabulky (tabulek) ve všech databázích"
+
+#: vacuumdb.c:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Generuji minimální statistiky optimizéru (1 cíl)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Generuji minimální statistiky optimizéru (1 cílů)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Generuji výchozí (plné) statistiky optimizéru"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: zpracovávám databázi \"%s\" : %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: provádí se VACUUM databáze \"%s\"\n"
+
+#: vacuumdb.c:899
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "provádění VACUUM tabulky \"%s\" v databázi \"%s\" selhalo: %s"
+
+#: vacuumdb.c:902
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "provádění VACUUM databáze \"%s\" selhalo: %s"
+
+#: vacuumdb.c:910
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s pročišťuje a analyzuje PostgreSQL databázi.\n"
+"\n"
+
+#: vacuumdb.c:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all provést VACUUM všech databází\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DATABÁZE jméno databáze k provedení příkazu VACUUM\n"
+
+#: vacuumdb.c:916
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping vypne veškeré přeskakování stránek\n"
+
+#: vacuumdb.c:917
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo ukázat příkazy posílané na server\n"
+
+#: vacuumdb.c:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full provést plné (FULL) VACUUM\n"
+
+#: vacuumdb.c:919
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze zmrazí transakční informace záznamů\n"
+
+#: vacuumdb.c:920
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM použij tento počet paralelních jobů pro vacuum\n"
+
+#: vacuumdb.c:921
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE minimální stáří multixact ID tabulek pro vacuum\n"
+
+#: vacuumdb.c:922
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=XID_AGE minimání stáří transaction ID pro vacuum\n"
+
+#: vacuumdb.c:923
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLEL_DEGREE použij tento počet pracovních procesů pro vacuum, pokud je to možné\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet tichý mód\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked přeskočí relace které nemohou být ihned zamknuty\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABULKA[(SLOUPCE)]' provést VACUUM pouze u specifikované tabulky\n"
+
+#: vacuumdb.c:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose vypisovat více informací\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version ukáže informace o verzi a skončí\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze aktualizace statistik optimalizéru\n"
+
+#: vacuumdb.c:930
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only pouze aktualizaze statistik optimalizéru; bez vacuum\n"
+
+#: vacuumdb.c:931
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages pouze aktualizuje statistiky optimizéru, v několika\n"
+" fázích pro rychlejší výsledky; bez vacuum\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help ukáže tento text a skončí\n"
+
+#: vacuumdb.c:941
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Pro detaily čtěte popis SQL příkazu VACUUM.\n"
+
+#~ msgid "%s: query failed: %s"
+#~ msgstr "%s: dotaz selhal: %s"
+
+#~ msgid "%s: query was: %s\n"
+#~ msgstr "%s: dotaz byl: %s\n"
+
+#~ msgid "%s: query returned %d row instead of one: %s\n"
+#~ msgid_plural "%s: query returned %d rows instead of one: %s\n"
+#~ msgstr[0] "%s: dotaz vrátil %d řádek namísto jedné: %s\n"
+#~ msgstr[1] "%s: dotaz vrátil %d řádky namísto jedné: %s\n"
+#~ msgstr[2] "%s: dotaz vrátil %d řádek namísto jedné: %s\n"
+
+#~ msgid "%s: %s"
+#~ msgstr "%s: %s"
+
+#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n"
+#~ msgstr "%s: vyžadováno příliš mnoho paralelních jobů (maximum: %d)\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n"
+#~ "be prompted interactively.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Je-li použit jeden z parametrů -d, -D, -r, -R, -s, -S, a jméno role\n"
+#~ "není zadáno, budete dotázán/a interaktivně.\n"
+
+#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n"
+#~ msgstr "%s: stále je %s funkcí definováno v jazyce \"%s\"; jazyk nebyl odstraněn.\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version ukáže informace o verzi a skončí\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help ukáže tento text a skončí\n"
+
+#~ msgid "%s: out of memory\n"
+#~ msgstr "%s: nedostatek paměti\n"
+
+#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n"
+#~ msgstr "%s: při provádění jen analyze nelze použít volbu \"freeze\"\n"
+
+#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n"
+#~ msgstr " -d, --dbname=DATABÁZE databáze, ze které bude jazyk odstraněn\n"
+
+#~ msgid ""
+#~ "%s removes a procedural language from a database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s odstraňuje procedurální jazyk z databáze.\n"
+#~ "\n"
+
+#~ msgid "%s: language removal failed: %s"
+#~ msgstr "%s: odstraňování jazyka selhalo: %s"
+
+#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n"
+#~ msgstr "%s: jazyk \"%s\" není v databázi \"%s\" instalován\n"
+
+#~ msgid " -N, --unencrypted do not encrypt stored password\n"
+#~ msgstr " -N, --unencrypted uložit heslo v otevřeném tvaru\n"
+
+#~ msgid " -E, --encrypted encrypt stored password\n"
+#~ msgstr " -E, --encrypted uložit heslo v zašifrované podobě\n"
+
+#~ msgid " -l, --list show a list of currently installed languages\n"
+#~ msgstr " -l, --list ukáže seznam již nainstalovaných jazyků\n"
+
+#~ msgid " -d, --dbname=DBNAME database to install language in\n"
+#~ msgstr " -d, --dbname=DATABÁZE databáze do které bude jazyk instalován\n"
+
+#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n"
+#~ msgstr " %s [PŘEPÍNAČ]... JAZYK [DATABÁZE]\n"
+
+#~ msgid ""
+#~ "%s installs a procedural language into a PostgreSQL database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s instaluje procedurální jazyk do PostgreSQL databáze.\n"
+#~ "\n"
+
+#~ msgid "%s: language installation failed: %s"
+#~ msgstr "%s: instalace jazyka selhala: %s"
+
+#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n"
+#~ msgstr "%s: jazyk \"%s\" je již v databázi \"%s\" instalován\n"
+
+#~ msgid "%s: missing required argument language name\n"
+#~ msgstr "%s: chybí povinný parametr jméno jazyka\n"
+
+#~ msgid "Procedural Languages"
+#~ msgstr "Procedurální jazyky"
+
+#~ msgid "Trusted?"
+#~ msgstr "Důvěryhodný?"
+
+#~ msgid "yes"
+#~ msgstr "ano"
+
+#~ msgid "no"
+#~ msgstr "ne"
+
+#~ msgid "Name"
+#~ msgstr "Jméno"
+
+#~ msgid "%s: could not get current user name: %s\n"
+#~ msgstr "%s: nelze získat aktuální uživatelské jméno: %s\n"
+
+#~ msgid "%s: could not obtain information about current user: %s\n"
+#~ msgstr "%s: nelze získat informace o aktuálním uživateli: %s\n"
+
+#~ msgid "reindexing of system catalogs failed: %s"
+#~ msgstr "reindexace systémového katalogu selhala: %s"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Chyby hlaste na adresu <pgsql-bugs@postgresql.org>.\n"
diff --git a/src/bin/scripts/po/de.po b/src/bin/scripts/po/de.po
new file mode 100644
index 0000000..ee7ab59
--- /dev/null
+++ b/src/bin/scripts/po/de.po
@@ -0,0 +1,1201 @@
+# German message translation file for "scripts".
+# Peter Eisentraut <peter@eisentraut.org>, 2003 - 2021.
+#
+# Use these quotes: »%s«
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-11-03 18:16+0000\n"
+"PO-Revision-Date: 2021-11-05 13:48+0100\n"
+"Last-Translator: Peter Eisentraut <peter@eisentraut.org>\n"
+"Language-Team: German <pgsql-translators@postgresql.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "Fatal: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "Fehler: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "Warnung: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "Speicher aufgebraucht\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "kann NULL-Zeiger nicht kopieren (interner Fehler)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "konnte effektive Benutzer-ID %ld nicht nachschlagen: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "Benutzer existiert nicht"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "Fehler beim Nachschlagen des Benutzernamens: Fehlercode %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Abbruchsanforderung gesendet\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "Konnte Abbruchsanforderung nicht senden: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Passwort: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "konnte nicht mit Datenbank %s verbinden: Speicher aufgebraucht"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "zu viele Jobs für diese Plattform"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "Verarbeitung der Datenbank »%s« fehlgeschlagen: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu Zeile)"
+msgstr[1] "(%lu Zeilen)"
+
+#: ../../fe_utils/print.c:3039
+#, c-format
+msgid "Interrupted\n"
+msgstr "Unterbrochen\n"
+
+#: ../../fe_utils/print.c:3103
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Kann keinen weiteren Spaltenkopf zur Tabelle hinzufügen: Spaltenzahl %d überschritten.\n"
+
+#: ../../fe_utils/print.c:3143
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Cann keine weitere Zelle zur Tabelle hinzufügen: Zellengesamtzahl %d überschritten.\n"
+
+#: ../../fe_utils/print.c:3401
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "ungültiges Ausgabeformat (interner Fehler): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "Anfrage fehlgeschlagen: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "Anfrage war: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig clustern"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken clustern"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Clustern der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "Clustern der Datenbank »%s« fehlgeschlagen: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: clustere Datenbank »%s«\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s clustert alle vorher geclusterten Tabellen in einer Datenbank.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Aufruf:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPTION]... [DBNAME]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Optionen:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all clustere alle Datenbanken\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME zu clusternde Datenbank\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr ""
+" -e, --echo zeige die Befehle, die an den Server\n"
+" gesendet werden\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet unterdrücke alle Mitteilungen\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABELLE clustere nur bestimmte Tabelle(n)\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose erzeuge viele Meldungen\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Verbindungsoptionen:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT Port des Datenbankservers\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NAME Datenbankbenutzername\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password niemals nach Passwort fragen\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password Passwortfrage erzwingen\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Für weitere Informationen lesen Sie bitte die Beschreibung des\n"
+"SQL-Befehls CLUSTER.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Berichten Sie Fehler an <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s Homepage: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "Anfrage ergab %d Zeile anstatt einer: %s"
+msgstr[1] "Anfrage ergab %d Zeilen anstatt einer: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "j"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Bitte antworten Sie »%s« oder »%s«.\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "--locale und --lc-ctype können nicht zusammen angegeben werden"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "--locale und --lc-collate können nicht zusammen angegeben werden"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "»%s« ist kein gültiger Kodierungsname"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "Erzeugen der Datenbank ist fehlgeschlagen: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "Erzeugen des Kommentars ist fehlgeschlagen (Datenbank wurde erzeugt): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s erzeugt eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPTION]... [DBNAME] [BESCHREIBUNG]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE Standard-Tablespace der Datenbank\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr ""
+" -e, --echo zeige die Befehle, die an den Server\n"
+" gesendet werden\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=KODIERUNG Kodierung für die Datenbank\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE Lokale-Einstellungen für die Datenbank\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE LC_COLLATE-Einstellung für die Datenbank\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE LC_CTYPE-Einstellung für die Datenbank\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=EIGENTÜMER Eigentümer der neuen Datenbank\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE zu kopierende Template-Datenbank\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT Port des Datenbankservers\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NAME Datenbankbenutzername\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password niemals nach Passwort fragen\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password Passwortfrage erzwingen\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Wenn nichts anderes angegeben ist, dann wird eine Datenbank mit dem Namen\n"
+"des aktuellen Benutzers erzeugt.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "ungültiger Wert für --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Geben Sie den Namen der neuen Rolle ein: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Geben Sie das Passwort der neuen Rolle ein: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Geben Sie es noch einmal ein: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Passwörter stimmten nicht überein.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Soll die neue Rolle ein Superuser sein?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Soll die neue Rolle Datenbanken erzeugen dürfen?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Soll die neue Rolle weitere neue Rollen erzeugen dürfen?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "Passwortverschlüsselung ist fehlgeschlagen: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "Erzeugen der neuen Rolle fehlgeschlagen: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s erzeugt eine neue PostgreSQL-Rolle.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPTION]... [ROLLENNAME]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N Hochzahl an Verbindungen für Rolle\n"
+" (Voreinstellung: keine Begrenzung)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb Rolle kann neue Datenbanken erzeugen\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb Rolle kann keine Datenbanken erzeugen (Voreinstellung)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLLE neue Rolle wird Mitglied dieser Rolle\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit Rolle erbt alle Privilegien von Rollen, deren\n"
+" Mitglied sie ist (Voreinstellung)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit Rolle erbt keine Privilegien\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login Rolle kann sich anmelden (Voreinstellung)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login Rolle kann sich nicht anmelden\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt weise der neuen Rolle ein Passwort zu\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole Rolle kann neue Rollen erzeugen\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole Rolle kann keine Rollen erzeugen (Voreinstellung)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser Rolle wird Superuser\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser Rolle wird kein Superuser (Voreinstellung)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive nach fehlenden Rollennamen und -attributen fragen\n"
+" anstatt Vorgabewerte zu nehmen\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication Rolle kann Replikation einleiten\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication Rolle kann Replikation nicht einleiten\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=NAME Datenbankbenutzername für die Verbindung\n"
+" (nicht der Name des neuen Benutzers)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "Datenbankname als Argument fehlt"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Datenbank »%s« wird unwiderruflich gelöscht werden.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Sind Sie sich sicher?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "Löschen der Datenbank fehlgeschlagen: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s löscht eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPTION]... DBNAME\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force vor dem Löschen versuchen andere Verbindungen abzubrechen\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive frage nach, bevor irgendetwas gelöscht wird\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists keinen Fehler ausgeben, wenn Datenbank nicht existiert\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Geben Sie den Namen der zu löschenden Rolle ein: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "Rollenname als Argument fehlt"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Rolle »%s« wird unwiderruflich gelöscht werden.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "Löschen der Rolle »%s« fehlgeschlagen: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s löscht eine PostgreSQL-Rolle.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive nachfragen, bevor irgendetwas gelöscht wird, und\n"
+" nach Rollennamen fragen, wenn nicht angegeben\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists keinen Fehler ausgeben, wenn Benutzer nicht existiert\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=NAME Datenbankbenutzername für die Verbindung\n"
+" (nicht der Name des zu löschenden Benutzers)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "konnte Standardoptionen nicht ermitteln"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "Verbindungen werden angenommen\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "Verbindungen werden abgelehnt\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "keine Antwort\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "kein Verbindungsversuch\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "unbekannt\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s führt eine Verbindungsprüfung gegen eine PostgreSQL-Datenbank aus.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPTION]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME Datenbankname\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet weniger ausgeben\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME Name des Datenbankservers oder Socket-Verzeichnis\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT Port des Datenbankservers\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SEK Sekunden auf Verbindung warten, 0 schaltet aus (Vorgabe: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NAME Datenbankbenutzername\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "Anzahl paralleler Jobs muss mindestens 1 sein"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig reindizieren"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "kann nicht alle Datenbanken und Systemkataloge gleichzeitig reindizieren"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "kann nicht bestimmte Schemas in allen Datenbanken reindizieren"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken reindizieren"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "kann nicht bestimmte Indexe in allen Datenbanken reindizieren"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "kann nicht bestimmte Schemas und Systemkataloge gleichzeitig reindizieren"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "kann nicht bestimmte Tabelle(n) und Systemkataloge gleichzeitig reindizieren"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "kann nicht bestimmte Indexe und Systemkataloge gleichzeitig reindizieren"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "kann nicht mehrere Jobs verwenden, um Systemkataloge zu reindizieren"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "kann nicht mehrere Jobs verwenden, um Indexe zu reindizieren"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "Option »%s« kann nicht mit Serverversionen älter als PostgreSQL %s verwendet werden"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "Systemkataloge können nicht nebenläufig reindiziert werden, werden alle übersprungen"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "Reindizieren der Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren des Index »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren des Schemas »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "Reindizieren der Systemkataloge in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindiziere Datenbank »%s«\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s reindiziert eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all alle Datenbanken reindizieren\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently nebenläufig reindizieren\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME zu reindizierende Datenbank\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX nur bestimmte(n) Index(e) erneuern\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NUM so viele parallele Verbindungen zum Reindizieren\n"
+" verwenden\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet unterdrücke alle Mitteilungen\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system nur Systemkataloge reindizieren\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA nur bestimmte(s) Schema(s) reindizieren\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABELLE nur bestimmte Tabelle(n) reindizieren\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABLESPACE Tablespace wo Indexe neu gebaut werden\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose erzeuge viele Meldungen\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Für weitere Informationen lesen Sie bitte die Beschreibung des\n"
+"SQL-Befehls REINDEX.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "parallele Arbeitsprozesse für Vacuum müssen größer oder gleich null sein"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "minimales Transaktions-ID-Alter muss mindestens 1 sein"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "minimales Multixact-ID-Alter muss mindestens 1 sein"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "kann Option »%s« nicht verwenden, wenn nur Analyze durchgeführt wird"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "kann Option »%s« nicht verwenden, wenn volles Vacuum durchgeführt wird"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "kann Option »%s« nicht mit der Option »%s« verwenden"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "kann nicht alle Datenbanken und eine bestimmte gleichzeitig vacuumen"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken vacuumen"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Erzeuge minimale Optimierer-Statistiken (1 Ziel)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Erzeuge mittlere Optimierer-Statistiken (10 Ziele)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Erzeuge volle Optimierer-Statistiken"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: bearbeite Datenbank »%s«: %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: führe Vacuum in Datenbank »%s« aus\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Vacuum der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "Vacuum der Datenbank »%s« fehlgeschlagen: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s säubert und analysiert eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all führe Vacuum in allen Datenbanken aus\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME führe Vacuum in dieser Datenbank aus\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping Page-Skipping-Verhalten abschalten\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr ""
+" -e, --echo zeige die Befehle, die an den Server\n"
+" gesendet werden\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full führe volles Vacuum durch\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze Zeilentransaktionsinformationen einfrieren\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup Indexeinträge, die auf tote Tupel zeigen, immer entfernen\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr ""
+" -j, --jobs=NUM so viele parallele Verbindungen zum Vacuum\n"
+" verwenden\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr ""
+" --min-mxid-age=MXID-ALTER minimales Multixact-ID-Alter zu bearbeitender\n"
+" Tabellen\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr ""
+" --min-xid-age=XID-ALTER minimales Transaktions-ID-Alter zu bearbeitender\n"
+" Tabellen\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup Indexeinträge, die auf tote Tupel zeigen, nicht entfernen\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast zur Tabelle gehörige TOAST-Tabelle überspringen\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate leere Seiten am Ende der Tabelle nicht abschneiden\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=PARALLEL-PROZ so viele Background-Worker für Vacuum verwenden,\n"
+" wenn verfügbar\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet unterdrücke alle Mitteilungen\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr ""
+" --skip-locked Relationen überspringen, die nicht sofort\n"
+" gesperrt werden können\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr ""
+" -t, --table='TABELLE[(SPALTEN)]'\n"
+" führe Vacuum für bestimmte Tabelle(n) aus\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose erzeuge viele Meldungen\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze aktualisiere Statistiken für den Optimierer\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr ""
+" -Z, --analyze-only aktualisiere nur Statistiken für den Optimierer;\n"
+" kein Vacuum\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages aktualisiere nur Statistiken für den Optimierer,\n"
+" in mehreren Phasen für schnellere Ergebnisse;\n"
+" kein Vacuum\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Für weitere Information lesen Sie bitte die Beschreibung des\n"
+"SQL-Befehls VACUUM.\n"
diff --git a/src/bin/scripts/po/el.po b/src/bin/scripts/po/el.po
new file mode 100644
index 0000000..7cf6af1
--- /dev/null
+++ b/src/bin/scripts/po/el.po
@@ -0,0 +1,1173 @@
+# Greek message translation file for pgscripts
+# Copyright (C) 2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pgscripts (PostgreSQL) package.
+# Georgios Kokolatos <gkokolatos@pm.me>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-11-08 10:16+0000\n"
+"PO-Revision-Date: 2021-11-08 12:11+0100\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"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "κρίσιμο: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "σφάλμα: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "προειδοποίηση: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "έλλειψη μνήμης\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "δεν ήταν δυνατή η αντιγραφή δείκτη null (εσωτερικό σφάλμα)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "δεν ήταν δυνατή η αναζήτηση ενεργής ταυτότητας χρήστη %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "ο χρήστης δεν υπάρχει"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "αποτυχία αναζήτησης ονόματος χρήστη: κωδικός σφάλματος % lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Αίτηση ακύρωσης εστάλη\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "Δεν ήταν δυνατή η αποστολή αίτησης ακύρωσης: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Κωδικός πρόσβασης: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "δεν ήταν δυνατή η σύνδεση με τη βάσης δεδομένων %s: έλλειψη μνήμης"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "πάρα πολλές εργασίες για την παρούσα πλατφόρμα"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "η επεξεργασία της βάσης δεδομένων «%s» απέτυχε: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu σειρά)"
+msgstr[1] "(%lu σειρές)"
+
+#: ../../fe_utils/print.c:3039
+#, c-format
+msgid "Interrupted\n"
+msgstr "Διακόπηκε\n"
+
+#: ../../fe_utils/print.c:3103
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Δεν είναι δυνατή η προσθήκη κεφαλίδας σε περιεχόμενο πίνακα: υπέρβαση του πλήθους στηλών %d.\n"
+
+#: ../../fe_utils/print.c:3143
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Δεν είναι δυνατή η προσθήκη κελιού σε περιεχόμενο πίνακα: υπέρβαση του συνολικού αριθμού κελιών %d.\n"
+
+#: ../../fe_utils/print.c:3401
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "μη έγκυρη μορφή εξόδου (εσωτερικό σφάλμα): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "το ερώτημα απέτυχε: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "το ερώτημα ήταν: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Δοκιμάστε «%s --help» για περισσότερες πληροφορίες.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "πάρα πολλοί παραμέτροι εισόδου από την γραμμή εντολών (ο πρώτη είναι η «%s»)"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "δεν είναι δυνατή η ομαδοποίηση όλων των βάσεων δεδομένων και μιας συγκεκριμένης ταυτόχρονα"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "δεν είναι δυνατή η ομαδοποίηση συγκεκριμένων πινάκων σε όλες τις βάσεις δεδομένων"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "η ομαδοποίηση του πίνακα «%s» στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "η ομαδοποίηση της βάσης δεδομένων «%s» απέτυχε: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: ομαδοποιείται η βάση δεδομένων «%s»\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s: ομαδοποιεί όλους του προηγούμενα ομαδοποιημένους πίνακες σε μία βάση δεδομένων\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Χρήση:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [ΕΠΙΛΟΓΗ]... [DBNAME]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Επιλογές:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all ομαδοποίησε όλες τις βάσεις δεδομένων\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME βάση δεδομένων για ομαδοποίηση\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo εμφάνισε τις εντολές που αποστέλλονται στο διακομιστή\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet να μην γράψεις κανένα μήνυμα\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE να ομαδοποιήσεις μόνο συγκεκριμένους πίνακες\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose γράψε πολλά μηνύματα εξόδου\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Επιλογές σύνδεσης:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT θύρα διακομιστή βάσης δεδομένων\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME όνομα χρήστη με το οποίο να συνδεθεί\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password αναγκαστική προτροπή κωδικού πρόσβασης\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME εναλλακτική βάση δεδομένων συντήρησης\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Διαβάστε την περιγραφή της SQL εντολής CLUSTER για λεπτομέρειες.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Υποβάλετε αναφορές σφάλματων σε <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s αρχική σελίδα: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "το ερώτημα επέστρεψε %d σειρά αντί μίας: %s"
+msgstr[1] "το ερώτημα επέστρεψε %d σειρές αντί μίας: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Παρακαλώ απαντήστε «%s» ή «%s».\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "μόνο ένα από τα --locale και --lc-ctype μπορεί να καθοριστεί"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "μόνο ένα από τα --locale και --lc-collate μπορεί να καθοριστεί"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "«%s» δεν είναι έγκυρο όνομα κωδικοποίησης"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "η δημιουργία βάσης δεδομένων απέτυχε: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "η δημιουργία σχολίων απέτυχε (δημιουργήθηκε βάση δεδομένων): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s δημιουργεί μια βάση δεδομένων PostgreSQL.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [ΕΠΙΛΟΓΗ]... [DBNAME] [ΠΕΡΙΓΡΑΦΗ]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE προεπιλεγμένος πινακοχώρος για τη βάση δεδομένων\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo εμφάνισε τις εντολές που αποστέλλονται στο διακομιστή\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING κωδικοποίηση για την βάση δεδομένων\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE ρυθμίσεις εντοπιότητας για τη βάση δεδομένων\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE ρύθμιση LC_COLLATE για την βάση δεδομένων\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-collate=LOCALE ρύθμιση LC_CTYPE για την βάση δεδομένων\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER όνομα χρήστη που θα κατέχει την νέα βάση δεδομένων\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE πρωτότυπη βάση δεδομένων για αντιγραφή\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης και, στη συνέχεια, έξοδος\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, και μετά έξοδος\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT θύρα διακομιστή βάσης δεδομένων\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME όνομα χρήστη με το οποίο να συνδεθεί\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password να μην ζητείται ποτέ κωδικός πρόσβασης\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password αναγκαστική προτροπή κωδικού πρόσβασης\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME εναλλακτική βάση δεδομένων συντήρησης\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Από προεπιλογή, δημιουργείται μια βάση δεδομένων με το ίδιο όνομα με τον τρέχοντα χρήστη.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "άκυρη τιμή για --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Εισαγάγετε το όνομα του ρόλου για να προσθέσετε: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Εισαγάγετε κωδικό πρόσβασης για νέο ρόλο: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Εισάγετε ξανά: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Οι κωδικοί πρόσβασης δεν είναι ίδιοι.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Να είναι ο νέος ρόλος υπερχρήστης;"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Να επιτραπεί στον νέο ρόλο η δημιουργία βάσεων δεδομένων;"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Να επιτραπεί στον νέο ρόλο να δημιουργήσει περισσότερους νέους ρόλους;"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "η κρυπτογράφηση κωδικού πρόσβασης απέτυχε: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "η δημιουργία νέου ρόλου απέτυχε: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s δημιουργεί ένα νέο ρόλο PostgreSQL.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [ΕΠΙΛΟΓΗ]... [ROLENAME]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N όριο σύνδεσης για το ρόλο (προεπιλογή: κανένα όριο)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb ο ρόλος μπορεί να δημιουργήσει νέες βάσεις δεδομένων\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb ο ρόλος δεν μπορεί να δημιουργήσει βάσεις δεδομένων (προεπιλογή)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE ο καινούριος ρόλος να αποτελεί μέλος αυτού του ρόλου\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit ο ρόλος να κληρονομεί τα προνόμια των ρόλων των\n"
+" οποίων είναι μέλος τους (προεπιλογή)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit ο ρόλος δεν κληρονομεί προνόμια\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login ο ρόλος μπορεί να συνδεθεί (προεπιλογή)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login ο ρόλος δεν μπορεί να συνδεθεί\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt αντιστοιχίσε έναν κωδικό πρόσβασης στο νέο ρόλο\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole ο ρόλος μπορεί να δημιουργεί νέους ρόλους\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole ο ρόλος δεν μπορεί να δημιουργεί νέους ρόλους (προεπιλογή)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser ο ρόλος θα είναι υπερχρήστης\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser ο ρόλος δεν θα είναι υπερχρήστης (προεπιλογή)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive να προτρέψει για το όνομα ρόλου και τα χαρακτηριστικά αντί\n"
+" να χρησιμοποιήσει προεπιλογές\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication ο ρόλος μπορεί να εκκινήσει αναπαραγωγή\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication ο ρόλος να μην μπορεί να εκκινήσει αναπαραγωγή\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=USERNAME όνομα χρήστη για να συνδεθεί ως (όχι αυτό που θα δημιουργηθεί)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "λείπει αναγκαία παράμετρος ονόματος βάσης δεδομένων"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Η βάση δεδομένων «%s» θα αφαιρεθεί οριστικά.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Είστε βέβαιος;"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "η αφαίρεση της βάσης δεδομένων απέτυχε: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s αφαιρεί μία βάση δεδομένων PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [ΕΠΙΛΟΓΗ]... [DBNAME]\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force να προσπαθήσει να τερματίσει άλλες συνδέσεις πριν την εγκατάληψη\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive να προτρέψει πριν να διαγράψει οτιδήποτε\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists να μην αναφέρει σφάλμα εάν η βάση δεδομένων δεν υπάρχει\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Εισαγάγετε το όνομα του ρόλου για να απορρίψετε: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "λείπει η απαιτούμενη παράμετρος ονόματος ρόλου"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Ο ρόλος «%s» θα αφαιρεθεί οριστικά.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "η αφαίρεση του ρόλου «%s» απέτυχε: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s αφαιρεί ένα ρόλο PostgreSQL.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive να προτρέψει πριν να διαγράψει οτιδήποτε, και να προτρέψει για\n"
+" το όνομα του ρόλου, εάν αυτό δεν έχει καθοριστεί\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists να μην αναφέρει σφάλμα εάν ο χρήστης δεν υπάρχει\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=USERNAME όνομα χρήστη με το οποίο να συνδεθεί (όχι αυτό που θα αφαιρέσει)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "δεν ήταν δυνατή η λήψη προεπιλεγμένων ρυθμίσεων"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "αποδέχεται συνδέσεις\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "απορρίπτει συνδέσεις\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "καμία απάντηση\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "καμία προσπάθεια\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "άγνωστο\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s εκτελεί ένα έλεγχο σύνδεσης σε μια βάση δεδομένων PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [ΕΠΙΛΟΓΗ]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME ονομασία βάσης δεδομένων\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet εκτέλεσε σιωπηλά\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME διακομιστής βάσης δεδομένων ή κατάλογος υποδοχών\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT θύρα διακομιστή βάσης δεδομένων\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr ""
+" -t, --timeout=SECS πόσα δευτερόλεπτα να περιμένει όταν προσπαθεί να συνδεθεί,\n"
+" 0 το απενεργοποιεί (προεπιλογή: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME όνομα χρήστη με το οποίο να συνδεθεί\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "ο αριθμός παράλληλων εργασιών πρέπει να είναι τουλάχιστον 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση όλων των βάσεων δεδομένων και μιας συγκεκριμένης ταυτόχρονα"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση όλων των βάσεων δεδομένων και των καταλόγων συστήματος ταυτόχρονα"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων σχημάτων σε όλες τις βάσεις δεδομένων"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων πινάκων σε όλες τις βάσεις δεδομένων"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων ευρετηρίων σε όλες τις βάσεις δεδομένων"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων σχημάτων και καταλόγων συστήματος ταυτόχρονα"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων πινάκων και καταλόγων συστήματος ταυτόχρονα"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "δεν είναι δυνατή η επαναευρετηριοποίηση συγκεκριμένων ευρετηρίων και καταλόγων συστήματος ταυτόχρονα"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "δεν είναι δυνατή η χρήση πολλαπλών εργασιών για την επαναευρετηριοποίηση καταλόγων συστήματος"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "δεν είναι δυνατή η χρήση πολλαπλών εργασιών για την επαναευρετηριοποίηση ευρετηρίων"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "δεν είναι δυνατή η χρήση της επιλογής «%s» σε εκδόσεις διακομιστών παλαιότερες από την PostgreSQL %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "δεν είναι δυνατή η ταυτόχρονη επαναευρετηριοποίηση καταλόγων συστήματος, παρακάμπτονται όλοι"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "επαναευρετηριοποίηση της βάσης δεδομένων «%s» απέτυχε: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "η επανενεξάγηση του ευρετηρίου «%s» στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "η επαναευρετηριοποίηση του σχήματος «%s» στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "η επαναευρετηριοποίηση καταλόγων συστήματος στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "η επαναευρετηριοποίηση του πίνακα «%s» στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: επαναευρετηριοποίηση της βάσης δεδομένων «%s»\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s επαναευρετηριοποιεί μια βάση δεδομένων PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all επαναευρετηριοποίηση όλων των βάσεων δεδομένων\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " -a, --all ταυτόχρονη επαναευρετηριοποίηση\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME βάση δεδομένων για επαναευρετηριοποίηση\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX δημιούργησε συγκεκριμένο(ους) πίνακα(ες) μόνο\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM χρησιμοποιήσε τόσες πολλές ταυτόχρονες συνδέσεις με το διακομιστή\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet να μην γράψεις κανένα μήνυμα\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system επαναευρετηριοποίηση μόνο καταλόγων συστήματος\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA επαναευρετηριοποίησε συγκεκριμένο(-α) σχήμα(-τα) μόνο\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE επαναευρετηριοποίησε συγκεκριμένο(-ους) πίνακα(-ες) μόνο\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABLESPACE πινακοχώρος όπου επαναδημιουργούνται τα ευρετήρια\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose γράψε πολλά μηνύματα εξόδου\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Διαβάστε την περιγραφή της SQL εντολής REINDEX για λεπτομέρειες.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "οι παράλληλοι εργάτες για vacuum πρέπει να είναι περισσότεροι ή ίσοι με μηδέν"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "η ελάχιστη ηλικία transaction ID πρέπει να είναι τουλάχιστον 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "η ελάχιστη ηλικία multixact ID πρέπει να είναι τουλάχιστον 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "δεν είναι δυνατή η χρήση της επιλογής «%s» κατά την εκτέλεση μόνο της ανάλυσης"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "δεν είναι δυνατή η χρήση της επιλογής «%s» κατά την εκτέλεση full vacuum"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "δεν είναι δυνατή η χρήση της επιλογής «%s» μαζί με την επιλογή«%s»"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "δεν μπορεί να εκτελέσει vacuum σε όλες τις βάσεις δεδομένων και μια συγκεκριμένη ταυτόχρονα"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "δεν μπορεί να εκτελέσει vacuum συγκεκριμένους πίνακες σε όλες τις βάσεις δεδομένων"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Δημιουργία ελάχιστων στατιστικών βελτιστοποιητή (1 στόχος)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Δημιουργία μεσαίων στατιστικών βελτιστοποιητή (10 στόχοι)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Δημιουργία προεπιλεγμένων (πλήρων) στατιστικών βελτιστοποιητή"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: επεξεργάζεται τη βάση δεδομένων «%s»: %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: εκτελεί vacuum στη βάση δεδομένων «%s»\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "η εκτέλεση vacuum στον πίνακα «%s» στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "η εκτέλεση vacuum στη βάση δεδομένων «%s» απέτυχε: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s καθαρίζει και αναλύει μια βάση δεδομένων PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all εκτέλεσε vacuum σε όλες τις βάσεις δεδομένων\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME βάση δεδομένων για vacuum\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping απενεργοποιήστε κάθε συμπεριφορά παράλειψης σελίδας\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo εμφάνισε τις εντολές που αποστέλλονται στο διακομιστή\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full να εκτελέσει πλήρες vacuum\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze πάγωσε τις πληροφορίες σειράς συναλλαγής\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup αφαιρεί πάντα καταχωρήσεις ευρετηρίου που οδηγούν σε νεκρές πλειάδες\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM χρησιμοποιήσε τόσες πολλές ταυτόχρονες συνδέσεις με το διακομιστή\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE ελάχιστη ηλικία multixact ID πινάκων για vacuum\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=XID_AGE ελάχιστη ηλικία transaction ID πινάκων για vacuum\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup να μην αφαιρέσει καταχωρήσεις ευρετηρίου που οδηγούν σε νεκρές πλειάδες\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast παράλειψε τον πίνακα TOAST που σχετίζεται με τον πίνακα που εκτελείται vacuum\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate να μην περικόψει άδειες σελίδες από το τέλος του πίνακα\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=PARALLEL_WORKERS χρησιμοποίησε τόσους πολλούς εργάτες παρασκηνίου\n"
+" για την εκτέλεση vacuum, εάν αυτοί είναι διαθέσιμοι\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet να μην γράψεις κανένα μήνυμα\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked να παραλείψει σχέσεις που δεν μπορούν να κλειδωθούν άμεσα\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table=‘TABLE[(COLUMNS)]’ να εκτελέσει vacuum μόνο σε συγκεκριμένους πίνακες\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose γράψε πολλά μηνύματα εξόδου\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze ενημέρωσε τα στατιστικά του βελτιστοποιητή\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -z, --analyze μόνο ενημέρωσε τα στατιστικά του βελτιστοποιητή· χωρίς vacuum\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages ενημέρωσε μόνο τα στατιστικά στοιχεία βελτιστοποίησης, σε πολλαπλά\n"
+" στάδια για ταχύτερα αποτελέσματα· χωρίς vacuum\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Διαβάστε την περιγραφή της SQL εντολής VACUUM για λεπτομέρειες.\n"
diff --git a/src/bin/scripts/po/es.po b/src/bin/scripts/po/es.po
new file mode 100644
index 0000000..a248824
--- /dev/null
+++ b/src/bin/scripts/po/es.po
@@ -0,0 +1,1189 @@
+# pgscripts spanish translation
+#
+# Copyright (c) 2003-2021, PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Alvaro Herrera, <alvherre@alvh.no-ip.org>, 2003-2013
+# Jaime Casanova, <systemguards@gmail.com>, 2005
+# Carlos Chapi <carlos.chapi@2ndquadrant.com>, 2013-2014, 2021
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-08-07 20:35+0000\n"
+"PO-Revision-Date: 2022-01-12 17:38-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: BlackCAT 1.1\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "error: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "precaución: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "memoria agotada\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "no se puede duplicar un puntero nulo (error interno)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "no se pudo buscar el ID de usuario efectivo %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "el usuario no existe"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "fallo en la búsqueda de nombre de usuario: código de error %lu"
+
+#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238
+msgid "Cancel request sent\n"
+msgstr "Petición de cancelación enviada\n"
+
+#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239
+msgid "Could not send cancel request: "
+msgstr "No se pudo enviar el paquete de cancelación: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Contraseña: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "no se pudo conectar a la base de datos %s: memoria agotada"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "demasiados procesos para esta plataforma"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "falló el procesamiento de la base de datos «%s»: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu fila)"
+msgstr[1] "(%lu filas)"
+
+#: ../../fe_utils/print.c:3040
+#, c-format
+msgid "Interrupted\n"
+msgstr "Interrumpido\n"
+
+#: ../../fe_utils/print.c:3104
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "No se puede agregar un encabezado al contenido de la tabla: la cantidad de columnas de %d ha sido excedida.\n"
+
+#: ../../fe_utils/print.c:3144
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "No se puede agregar una celda al contenido de la tabla: la cantidad de celdas de %d ha sido excedida.\n"
+
+#: ../../fe_utils/print.c:3402
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "formato de salida no válido (error interno): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "la consulta falló: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "la consulta era: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Use «%s --help» para mayor información.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "no se pueden reordenar todas las bases de datos y una de ellas en particular simultáneamente"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "no es posible reordenar tablas específicas en todas las bases de datos"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "falló el reordenamiento de la tabla «%s» en la base de datos «%s»: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "falló el reordenamiento de la base de datos «%s»: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: reordenando la base de datos «%s»\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s reordena todas las tablas previamente reordenadas\n"
+"en una base de datos.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Empleo:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opciones:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all reordenar todas las bases de datos\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=BASE base de datos a reordenar\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo mostrar las órdenes a medida que se ejecutan\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet no escribir ningún mensaje\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLA reordenar sólo esta(s) tabla(s)\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose desplegar varios mensajes informativos\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostrar información de versión y salir\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Opciones de conexión:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PUERTO puerto del servidor\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password nunca pedir contraseña\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password forzar la petición de contraseña\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Lea la descripción de la orden CLUSTER de SQL para obtener mayores detalles.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Reporte errores a <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Sitio web de %s: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "la consulta retornó %d fila en lugar de una: %s"
+msgstr[1] "la consulta retornó %d filas en lugar de una: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "s"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Por favor conteste «%s» o «%s».\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "sólo uno de --locale y --lc-ctype puede ser especificado"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "sólo uno de --locale y --lc-collate puede ser especificado"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "«%s» no es un nombre válido de codificación"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "falló la creación de la base de datos: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "falló la creación del comentario (la base de datos fue creada): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s crea una base de datos PostgreSQL.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPCIÓN]... [NOMBRE] [DESCRIPCIÓN]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TBLSPC tablespace por omisión de la base de datos\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=CODIF codificación para la base de datos\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE configuración regional para la base de datos\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE configuración LC_COLLATE para la base de datos\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE configuración LC_CTYPE para la base de datos\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=DUEÑO usuario que será dueño de la base de datos\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=PATRÓN base de datos patrón a copiar\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostrar información de versión y salir\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PUERTO puerto del servidor\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password nunca pedir contraseña\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password forzar la petición de contraseña\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=BASE base de datos de mantención alternativa\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Si no se especifica, se creará una base de datos con el mismo nombre que\n"
+"el usuario actual.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "valor para --connection-limit no válido: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Ingrese el nombre del rol a agregar: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Ingrese la contraseña para el nuevo rol: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Ingrésela nuevamente: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Las contraseñas no coinciden.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "¿Será el nuevo rol un superusuario?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "¿Debe permitírsele al rol la creación de bases de datos?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "¿Debe permitírsele al rol la creación de otros roles?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "el cifrado de la contraseña falló: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "falló la creación del nuevo rol: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s crea un nuevo rol de PostgreSQL.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPCIÓN]... [ROL]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N límite de conexiones para el rol\n"
+" (predeterminado: sin límite)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb el rol podrá crear bases de datos\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb el rol no podrá crear bases de datos (predeterm.)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROL el nuevo rol será un miembro de este rol\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit el rol heredará los privilegios de los roles de\n"
+" los cuales es miembro (predeterminado)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit rol no heredará privilegios\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login el rol podrá conectarse (predeterminado)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login el rol no podrá conectarse\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt asignar una contraseña al nuevo rol\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole el rol podrá crear otros roles\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole el rol no podrá crear otros roles (predeterminado)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser el rol será un superusuario\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser el rol no será un superusuario (predeterminado)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive preguntar los nombres y atributos de rol faltantes\n"
+" en lugar de asumir los valores por omisión\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication el rol podrá iniciar replicación\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication el rol no podrá iniciar replicación\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=NOMBRE nombre de usuario con el cual conectarse\n"
+" (no el usuario a crear)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "falta el nombre de base de datos requerido"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "La base de datos «%s» será eliminada permanentemente.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "¿Está seguro?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "falló la eliminación de la base de datos: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s elimina una base de datos de PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPCIÓN]... BASE-DE-DATOS\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force intentar cancelar otras conexiones antes de borrar\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive preguntar antes de eliminar\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists no reportar error si la base de datos no existe\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Ingrese el nombre del rol a eliminar: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "falta el nombre de rol requerido"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "El rol «%s» será eliminado permanentemente.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "falló la eliminación del rol «%s»: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s elimina un rol de PostgreSQL.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive preguntar antes de eliminar cualquier cosa, y\n"
+" preguntar el nombre de rol si no se especifica\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists no reportar error si el usuario no existe\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=USUARIO nombre del usuario con el cual conectarse\n"
+" (no el usuario a eliminar)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "no se pudo extraer las opciones por omisión"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "aceptando conexiones\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "rechazando conexiones\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "sin respuesta\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "sin intentos\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "desconocido\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s emite una prueba de conexión a una base de datos PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPCIÓN]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME nombre de la base de datos\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet ejecutar de forma silenciosa\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostrar información de versión y salir\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=ANFITRIÓN nombre del servidor o directorio del socket\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PUERTO puerto del servidor\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr ""
+" -t, --timeout=SEGUNDOS segundos a esperar al intentar conectarse\n"
+" 0 lo deshabilita (por omisión: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USUARIO nombre de usuario para la conexión\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "número de trabajos en paralelo debe ser al menos 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "no se pueden reindexar todas las bases de datos y una de ellas en particular simultáneamente"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "no se pueden reindexar todas las bases de datos y los catálogos del sistema simultáneamente"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "no es posible reindexar esquemas específicos en todas las bases de datos"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "no es posible reindexar tablas específicas en todas las bases de datos"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "no es posible reindexar índices específicos en todas las bases de datos"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "no es posible reindexar esquemas específicos y los catálogos del sistema simultáneamente"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "no es posible reindexar tablas específicas y los catálogos del sistema simultáneamente"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "no es posible reindexar índices específicos y los catálogos del sistema simultáneamente"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "no se pueden usar múltiples procesos para reindexar índices de sistema"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "no se pueden usar múltiples procesos para reindexar índices"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "no se puede usar la opción «%s» cuando con versiones más antiguas que PostgreSQL %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "no se puede reindexar un catálogo de sistema concurrentemente, omitiéndolos todos"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "falló la reindexación de la base de datos «%s»: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "falló la reindexación del índice «%s» en la base de datos «%s»: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "falló la reindexación del esquema «%s» en la base de datos «%s»: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "falló la reindexación de los catálogos de sistema en la base de datos «%s»: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "falló la reindexación de la tabla «%s» en la base de datos «%s»: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindexando la base de datos «%s»\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s reindexa una base de datos PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all reindexar todas las bases de datos\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently reindexar en modo concurrente\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=BASE-DE-DATOS base de datos a reindexar\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=ÍNDICE recrear sólo este o estos índice(s)\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NÚM usar esta cantidad de conexiones concurrentes\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet no desplegar mensajes\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system solo reindexar los catálogos del sistema\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=ESQUEMA reindexar sólo este o estos esquemas\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLA reindexar sólo esta(s) tabla(s)\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABLESPACE tablespace donde se reconstruirán los índices\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose desplegar varios mensajes informativos\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Lea la descripción de la orden REINDEX de SQL para obtener mayores detalles.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "el número de procesos paralelos para vacuum debe ser mayor o igual que cero"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "edad mínima del ID de transacción debe ser al menos 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "edad mínima del ID de multixact debe ser al menos 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "no se puede usar la opción «%s» cuando se está sólo actualizando estadísticas"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "no se puede usar la opción «%s» cuando se está ejecutando vacuum full"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "no se puede usar la opción «%s» junto con la opción «%s»"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "no se pueden limpiar todas las bases de datos y una de ellas en particular simultáneamente"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "no es posible limpiar tablas específicas en todas las bases de datos"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Generando estadísticas mínimas para el optimizador (tamaño = 1)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Generando estadísticas medias para el optimizador (tamaño = 10)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Generando estadísticas predeterminadas (completas) para el optimizador"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: procesando la base de datos «%s»: %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: limpiando la base de datos «%s»\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "falló la limpieza de la tabla «%s» en la base de datos «%s»: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "falló la limpieza de la base de datos «%s»: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s limpia (VACUUM) y analiza una base de datos PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all limpia todas las bases de datos\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=BASE base de datos a limpiar\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping desactiva todo comportamiento de saltar páginas\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo mostrar las órdenes enviadas al servidor\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full usar «vacuum full»\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze usar «vacuum freeze»\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup siempre eliminar entradas de índice que apunten a tuplas muertas\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=EDAD_MXID edad de multixact ID mínima de tablas a limpiar\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=EDAD_XID edad de ID de transacción mínima de tablas a limpiar\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup no eliminar entradas de índice que apunten a tuplas muertas\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast Omitir la tabla TOAST asociada con la tabla a la que se hará vacuum\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate no truncar las páginas vacías al final de la tabla\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PROC_PARALELOS usar esta cantidad de procesos para vacuum, si están disponibles\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet no desplegar mensajes\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked ignorar relaciones que no pueden bloquearse inmediatamente\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr ""
+" -t, --table='TABLA[(COLUMNAS)]'\n"
+" limpiar sólo esta(s) tabla(s)\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose desplegar varios mensajes informativos\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostrar información de versión y salir\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze actualizar las estadísticas del optimizador\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr ""
+" -Z, --analyze-only sólo actualizar las estadísticas del optimizador;\n"
+" no hacer vacuum\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages sólo actualizar las estadísticas del optimizador,\n"
+" en múltiples etapas para resultados más rápidos;\n"
+" no hacer vacuum\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Lea la descripción de la orden VACUUM de SQL para obtener mayores detalles.\n"
diff --git a/src/bin/scripts/po/fr.po b/src/bin/scripts/po/fr.po
new file mode 100644
index 0000000..b78a218
--- /dev/null
+++ b/src/bin/scripts/po/fr.po
@@ -0,0 +1,1396 @@
+# translation of pgscripts.po to fr_fr
+# french message translation file for pgscripts
+#
+# Use these quotes: « %s »
+#
+# Guillaume Lelarge <guillaume@lelarge.info>, 2004-2009.
+# Stéphane Schildknecht <stephane.schildknecht@dalibo.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-10-28 16:17+0000\n"
+"PO-Revision-Date: 2021-10-29 16:17+0200\n"
+"Last-Translator: Guillaume Lelarge <guillaume@lelarge.info>\n"
+"Language-Team: PostgreSQLfr <pgsql-fr-generale@postgresql.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 3.0\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "fatal : "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "erreur : "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "attention : "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "mémoire épuisée\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "ne peut pas dupliquer un pointeur nul (erreur interne)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "n'a pas pu trouver l'identifiant réel %ld de l'utilisateur : %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "l'utilisateur n'existe pas"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "échec de la recherche du nom d'utilisateur : code d'erreur %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Requête d'annulation envoyée\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "N'a pas pu envoyer la requête d'annulation : "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Mot de passe : "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "n'a pas pu se connecter à la base de données %s : plus de mémoire"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "trop de jobs pour cette plateforme"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "le traitement de la base de données « %s » a échoué : %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu ligne)"
+msgstr[1] "(%lu lignes)"
+
+#: ../../fe_utils/print.c:3039
+#, c-format
+msgid "Interrupted\n"
+msgstr "Interrompu\n"
+
+#: ../../fe_utils/print.c:3103
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr ""
+"Ne peut pas ajouter l'en-tête au contenu de la table : le nombre de colonnes\n"
+"%d est dépassé.\n"
+
+#: ../../fe_utils/print.c:3143
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr ""
+"Ne peut pas ajouter une cellule au contenu de la table : le nombre total des\n"
+"cellules %d est dépassé.\n"
+
+#: ../../fe_utils/print.c:3401
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "format de sortie invalide (erreur interne) : %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "échec de la requête : %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "la requête était : %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Essayer « %s --help » pour plus d'informations.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "ne peut pas réorganiser à la fois toutes les bases de données et une base spécifique via la commande CLUSTER"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "ne peut pas réorganiser la(les) table(s) spécifique(s) dans toutes les bases de données"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "la réorganisation de la table « %s » de la base de données « %s » avec la commande CLUSTER a échoué : %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "la réorganisation de la base de données « %s » via la commande CLUSTER a échoué : %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s : réorganisation de la base de données « %s » via la commande CLUSTER\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s réorganise toutes les tables précédemment réorganisées au sein d'une\n"
+"base de données via la commande CLUSTER.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Usage :\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPTION]... [BASE]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Options :\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all réorganise toutes les bases de données\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=BASE réorganise la base de données spécifiée\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo affiche les commandes envoyées au serveur\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet n'écrit aucun message\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE réorganise uniquement la table spécifiée\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mode verbeux\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Options de connexion :\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HÔTE hôte du serveur de bases de données ou\n"
+" répertoire des sockets\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port du serveur de bases de données\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UTILISATEUR nom d'utilisateur pour la connexion\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password empêche la demande d'un mot de passe\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password force la demande d'un mot de passe\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=BASE indique une autre base par défaut\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Lire la description de la commande SQL CLUSTER pour de plus amples détails.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapporter les bogues à <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Page d'accueil de %s : <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "la requête a renvoyé %d ligne au lieu d'une seule : %s"
+msgstr[1] "la requête a renvoyé %d lignes au lieu d'une seule : %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "o"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Merci de répondre « %s » ou « %s ».\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "une seule des options --locale et --lc-ctype peut être indiquée"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "une seule des options --locale et --lc-collate peut être indiquée"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "« %s » n'est pas un nom d'encodage valide"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "la création de la base de données a échoué : %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "l'ajout du commentaire a échoué (la base de données a été créée) : %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s crée une base de données PostgreSQL.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPTION]... [BASE] [DESCRIPTION]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE tablespace par défaut de la base de données\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo affiche les commandes envoyées au serveur\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODAGE encodage de la base de données\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE paramètre de la locale pour la base de données\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE paramètre LC_COLLATE pour la base de données\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE paramètre LC_CTYPE pour la base de données\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr ""
+" -O, --owner=PROPRIÉTAIRE nom du propriétaire de la nouvelle base de\n"
+" données\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=MODÈLE base de données modèle à copier\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HÔTE hôte du serveur de bases de données\n"
+" ou répertoire des sockets\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port du serveur de bases de données\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UTILISATEUR nom d'utilisateur pour la connexion\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password empêche la demande d'un mot de passe\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password force la demande d'un mot de passe\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=BASE indique une autre base par défaut\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Par défaut, la base de donnée créée porte le nom de l'utilisateur courant.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "valeur invalide pour --connection-limit : %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Saisir le nom du rôle à ajouter : "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Saisir le mot de passe pour le nouveau rôle : "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Saisir le mot de passe à nouveau : "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Les mots de passe ne sont pas identiques.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Le nouveau rôle est-il super-utilisateur ?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Le nouveau rôle est-il autorisé à créer des bases de données ?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Le nouveau rôle est-il autorisé à créer de nouveaux rôles ?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "échec du chiffrement du mot de passe : %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "la création du nouveau rôle a échoué : %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s crée un nouvel rôle PostgreSQL.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPTION]... [RÔLE]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N nombre maximum de connexions pour le rôle (par\n"
+" défaut sans limite)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb le rôle peut créer des bases de données\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr ""
+" -D, --no-createdb le rôle ne peut pas créer de bases de données\n"
+" (par défaut)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE le nouveau rôle sera un membre de ce rôle\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit le rôle hérite des droits des rôles dont il est\n"
+" membre (par défaut)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit le rôle n'hérite pas des droits\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login le rôle peut se connecter (par défaut)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login le rôle ne peut pas se connecter\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt affecte un mot de passe au nouveau rôle\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole le rôle peut créer des rôles\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole le rôle ne peut pas créer de rôles (par défaut)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser le rôle est super-utilisateur\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr ""
+" -S, --no-superuser le rôle n'est pas super-utilisateur (par\n"
+" défaut)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive demande le nom du rôle et les attributs\n"
+" plutôt qu'utiliser des valeurs par défaut\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr ""
+" --replication le rôle peut initier une connexion de\n"
+" réplication\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr ""
+" --no-replication le rôle ne peut pas initier de connexion de\n"
+" réplication\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=UTILISATEUR nom de l'utilisateur pour la connexion (pas\n"
+" celui à créer)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "argument nom de la base de données requis mais manquant"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "La base de données « %s » sera définitivement supprimée.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Êtes-vous sûr ?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "la suppression de la base de données a échoué : %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s supprime une base de données PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPTION]... BASE\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr ""
+" -f, --force essaie d'arrêter les autres connexions avant de\n"
+" supprimer\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr ""
+" -i, --interactive demande confirmation avant de supprimer quoi\n"
+" que ce soit\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr ""
+" --if-exists ne renvoie pas d'erreur si la base\n"
+" n'existe pas\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Saisir le nom du rôle à supprimer : "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "argument nom du rôle requis mais manquant"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Le rôle « %s » sera définitivement supprimé.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "la suppression du rôle « %s » a échoué : %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s supprime un rôle PostgreSQL.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive demande confirmation avant de supprimer quoi\n"
+" que ce soit, et demande le nom du rôle s'il\n"
+" n'est pas indiqué\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr ""
+" --if-exists ne renvoie pas d'erreur si l'utilisateur\n"
+" n'existe pas\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=UTILISATEUR nom de l'utilisateur pour la connexion (pas\n"
+" celui à supprimer)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "n'a pas pu récupérer les options par défaut"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "acceptation des connexions\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "rejet des connexions\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "pas de réponse\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "pas de tentative\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "inconnu\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s réalise un test de connexion à une base de données PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPTION]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=BASE base de données\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet s'exécute sans affichage\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HÔTE hôte du serveur de bases de données ou\n"
+" répertoire des sockets\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT port du serveur de bases de données\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr ""
+" -t, --timeout=SECS durée en secondes à attendre lors d'une tentative\n"
+" de connexion ; 0 pour désactiver (défaut: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=UTILISATEUR nom d'utilisateur pour la connexion\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "le nombre maximum de jobs en parallèle doit être au moins de 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "ne peut pas réindexer toutes les bases de données et une base spécifique en même temps"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "ne peut pas réindexer toutes les bases de données et les catalogues système en même temps"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "ne peut pas réindexer un (des) schéma(s) spécifique(s) dans toutes les bases de données"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "ne peut pas réindexer une (des) table(s) spécifique(s) dans toutes les bases de données"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "ne peut pas réindexer un (des) index spécifique(s) dans toutes les bases de données"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "ne peut pas réindexer un (des) schéma(s) spécifique(s) et les catalogues système en même temps"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "ne peut pas réindexer une (des) table(s) spécifique(s) etles catalogues système en même temps"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "ne peut pas réindexer un (des) index spécifique(s) et les catalogues système en même temps"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les catalogues systèmes"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les index"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "ne peut utiliser l'option « %s » sur des versions serveurs plus anciennes que PostgreSQL %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "ne peut pas réindexer les catalogues système de manière concurrente, ignore tout"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "la réindexation de la base de données « %s » a échoué : %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "la réindexation de l'index « %s » dans la base de données « %s » a échoué : %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "la réindexation du schéma « %s » dans la base de données « %s » a échoué : %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "la réindexation des catalogues systèmes dans la base de données « %s » a échoué : %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "la réindexation de la table « %s » dans la base de données « %s » a échoué : %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s : réindexation de la base de données « %s »\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s réindexe une base de données PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all réindexe toutes les bases de données\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently réindexation en concurrence\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=BASE réindexe la base de données spécifiée\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX réindexe uniquement l'index spécifié\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NOMBRE utilise ce nombre de connexions concurrentes\n"
+" pour l'opération de réindexation\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet n'écrit aucun message\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system réindexe seulement les catalogues système\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHÉMA réindexe uniquement le schéma spécifié\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE réindexe uniquement la table spécifiée\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr ""
+" --tablespace=TABLESPACE précise le tablespace où les index seront\n"
+" reconstruits\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mode verbeux\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Lire la description de la commande SQL REINDEX pour plus d'informations.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "le nombre de processus parallélisés pour l VACUUM doit être supérieur à zéro"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "l'identifiant de la transaction (-x) doit valoir au moins 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "l'âge minimum de l'identifiant de multitransaction doit au moins être 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un ANALYZE seul"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "ne peut pas utiliser l'option « %s » lors de l'exécution d'un VACUUM FULL"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "ne peut pas utiliser l'option « %s » lors de l'option « %s »"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "ne peut pas exécuter VACUUM sur toutes les bases de données et sur une base spécifique en même temps"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "ne peut pas exécuter VACUUM sur une(des) table(s) spécifique(s) dans toutes les bases de données"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Génération de statistiques minimales pour l'optimiseur (une cible)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Génération de statistiques moyennes pour l'optimiseur (dix cibles)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Génération de statistiques complètes pour l'optimiseur"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s : traitement de la base de données « %s » %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s : exécution de VACUUM sur la base de données « %s »\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "l'exécution de VACUUM sur la table « %s » dans la base de données « %s » a échoué : %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "l'exécution de VACUUM sur la base de données « %s » a échoué : %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s nettoie et analyse une base de données PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all exécute VACUUM sur toutes les bases de données\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=BASE exécute VACUUM sur cette base de données\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping désactive le comportement page-skipping\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo affiche les commandes envoyées au serveur\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full exécute VACUUM en mode FULL\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr ""
+" -F, --freeze gèle les informations de transactions des\n"
+" lignes\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr ""
+" --force-index-cleanup supprime toujours les enregistrements dans\n"
+" l'index pointant vers des lignes mortes\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr ""
+" -j, --jobs=NOMBRE utilise ce nombre de connexions concurrentes\n"
+" pour le VACUUM\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr ""
+" --min-mxid-age=MXID_AGE âge minimum des identifiants de\n"
+" multitransactions pour les tables à nettoyer\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr ""
+" --min-xid-age=XID_AGE âge minimum des identifiants de transactions\n"
+" pour les tables à nettoyer\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr ""
+" --no-index-cleanup ne supprime pas les enregistrements dans\n"
+" l'index pointant vers des lignes mortes\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr ""
+" --no-process-toast ignore la table TOAST associée à la table à\n"
+" traiter\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr ""
+" --no-truncate ne supprime pas les pages vides à la fin de\n"
+" la table\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=NOMBRE utilise ce nombre de processus en tâche de\n"
+" fond pour le VACUUM, si possible\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet n'écrit aucun message\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr ""
+" --skip-locked ignore les relations qui ne peuvent pas être\n"
+" verrouillées immédiatement\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLONNES)]' exécute VACUUM sur cette table\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mode verbeux\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze met à jour les statistiques de l'optimiseur\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr ""
+" -Z, --analyze-only met seulement à jour les statistiques de\n"
+" l'optimiseur ; pas de VACUUM\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages met seulement à jour les statistiques de\n"
+" l'optimiseur, en plusieurs étapes pour de\n"
+" meilleurs résultats ; pas de VACUUM\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Lire la description de la commande SQL VACUUM pour plus d'informations.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapporter les bogues à <pgsql-bugs@lists.postgresql.org>.\n"
+
+#~ msgid "reindexing of system catalogs failed: %s"
+#~ msgstr "la réindexation des catalogues système a échoué : %s"
+
+#~ msgid "%s: invalid socket: %s"
+#~ msgstr "%s : socket invalide : %s"
+
+#~ msgid "%s: could not obtain information about current user: %s\n"
+#~ msgstr "%s : n'a pas pu obtenir les informations concernant l'utilisateur actuel : %s\n"
+
+#~ msgid "%s: could not get current user name: %s\n"
+#~ msgstr "%s : n'a pas pu récupérer le nom de l'utilisateur actuel : %s\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version affiche la version et quitte\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help affiche cette aide et quitte\n"
+
+#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n"
+#~ msgstr ""
+#~ "%s : il existe encore %s fonctions déclarées dans le langage « %s » ;\n"
+#~ "langage non supprimé\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n"
+#~ "be prompted interactively.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Si une des options -d, -D, -r, -R, -s, -S et RÔLE n'est pas précisée,\n"
+#~ "elle sera demandée interactivement.\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version affiche la version et quitte\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help affiche cette aide et quitte\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version affiche la version et quitte\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help affiche cette aide et quitte\n"
+
+#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n"
+#~ msgstr "pg_strdup : ne peut pas dupliquer un pointeur nul (erreur interne)\n"
+
+#~ msgid "%s: out of memory\n"
+#~ msgstr "%s : mémoire épuisée\n"
+
+#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n"
+#~ msgstr ""
+#~ "%s : ne peut utiliser l'option « freeze » lors de l'exécution d'un ANALYZE\n"
+#~ "seul\n"
+
+#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n"
+#~ msgstr ""
+#~ " -d, --dbname=BASE base de données à partir de laquelle\n"
+#~ " supprimer le langage\n"
+
+#~ msgid ""
+#~ "%s removes a procedural language from a database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s supprime un langage procédural d'une base de données.\n"
+#~ "\n"
+
+#~ msgid "%s: language removal failed: %s"
+#~ msgstr "%s : la suppression du langage a échoué : %s"
+
+#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n"
+#~ msgstr "%s : le langage « %s » n'est pas installé dans la base de données « %s »\n"
+
+#~ msgid " -N, --unencrypted do not encrypt stored password\n"
+#~ msgstr " -N, --unencrypted ne chiffre pas le mot de passe stocké\n"
+
+#~ msgid " -E, --encrypted encrypt stored password\n"
+#~ msgstr " -E, --encrypted chiffre le mot de passe stocké\n"
+
+#~ msgid " -l, --list show a list of currently installed languages\n"
+#~ msgstr ""
+#~ " -l, --list affiche la liste des langages déjà\n"
+#~ " installés\n"
+
+#~ msgid " -d, --dbname=DBNAME database to install language in\n"
+#~ msgstr " -d, --dbname=BASE base sur laquelle installer le langage\n"
+
+#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n"
+#~ msgstr " %s [OPTION]... NOMLANGAGE [BASE]\n"
+
+#~ msgid ""
+#~ "%s installs a procedural language into a PostgreSQL database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s installe un langage de procédures dans une base de données PostgreSQL.\n"
+#~ "\n"
+
+#~ msgid "%s: language installation failed: %s"
+#~ msgstr "%s : l'installation du langage a échoué : %s"
+
+#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n"
+#~ msgstr "%s : le langage « %s » est déjà installé sur la base de données « %s »\n"
+
+#~ msgid "%s: missing required argument language name\n"
+#~ msgstr "%s : argument nom du langage requis mais manquant\n"
+
+#~ msgid "Procedural Languages"
+#~ msgstr "Langages procéduraux"
+
+#~ msgid "Trusted?"
+#~ msgstr "De confiance (trusted) ?"
+
+#~ msgid "yes"
+#~ msgstr "oui"
+
+#~ msgid "no"
+#~ msgstr "non"
+
+#~ msgid "Name"
+#~ msgstr "Nom"
+
+#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n"
+#~ msgstr "%s : trop de jobs en parallèle demandés (maximum %d)\n"
+
+#~ msgid "%s: %s"
+#~ msgstr "%s : %s"
+
+#~ msgid "%s: \"%s\" is not a valid encoding name\n"
+#~ msgstr "%s : « %s » n'est pas un nom d'encodage valide\n"
+
+#~ msgid "%s: query returned %d row instead of one: %s\n"
+#~ msgid_plural "%s: query returned %d rows instead of one: %s\n"
+#~ msgstr[0] "%s : la requête a renvoyé %d ligne au lieu d'une seule : %s\n"
+#~ msgstr[1] "%s : la requête a renvoyé %d lignes au lieu d'une seule : %s\n"
+
+#~ msgid "%s: query was: %s\n"
+#~ msgstr "%s : la requête était : %s\n"
+
+#~ msgid "%s: query failed: %s"
+#~ msgstr "%s : échec de la requête : %s"
+
+#~ 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 connect to database %s: %s"
+#~ msgstr "n'a pas pu se connecter à la base de données %s : %s"
+
+#~ msgid "Could not send cancel request: %s"
+#~ msgstr "N'a pas pu envoyer la requête d'annulation : %s"
+
+#~ msgid "parallel vacuum degree must be a non-negative integer"
+#~ msgstr "le degré de parallélisation du VACUUM doit être un entier non négatif"
diff --git a/src/bin/scripts/po/ja.po b/src/bin/scripts/po/ja.po
new file mode 100644
index 0000000..c00f2bc
--- /dev/null
+++ b/src/bin/scripts/po/ja.po
@@ -0,0 +1,1185 @@
+# pgscripts.po
+# Japanese message translation file for scripts
+#
+# Copyright (C) 2011-2022 PostgreSQL Global Development Group
+#
+# This file is distributed under the same license as the PostgreSQL package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: scripts (PostgreSQL 14)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-05-12 14:05+0900\n"
+"PO-Revision-Date: 2022-05-12 14:50+0900\n"
+"Last-Translator: Kyotaro Horiguchi <horikyota.ntt@gmail.com>\n"
+"Language-Team: jpug-doc <jpug-doc@ml.postgresql.jp>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 1.8.13\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "致命的エラー: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "エラー: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "メモリ不足\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "nullポインタは複製できません (内部エラー)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "実効ユーザーID %ld が見つかりませんでした: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "ユーザーが存在しません"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "ユーザー名の参照に失敗: エラーコード %lu"
+
+#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238
+msgid "Cancel request sent\n"
+msgstr "キャンセル要求を送信しました\n"
+
+#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239
+msgid "Could not send cancel request: "
+msgstr "キャンセル要求を送信できませんでした: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "パスワード: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "データベース%sに接続できませんでした: メモリ不足"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "このプラットフォームではジョブ数が多すぎます"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "データベース\"%s\"の処理に失敗しました: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu 行)"
+msgstr[1] "(%lu 行)"
+
+#: ../../fe_utils/print.c:3040
+#, c-format
+msgid "Interrupted\n"
+msgstr "中断されました\n"
+
+#: ../../fe_utils/print.c:3104
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "テーブルの内容に見出しを追加できませんでした: 列数%dが制限を超えています。\n"
+
+#: ../../fe_utils/print.c:3144
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "テーブルの内容にセルを追加できませんでした: 全セル数%dが制限を超えています。\n"
+
+#: ../../fe_utils/print.c:3402
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "出力フォーマットが無効(内部エラー): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "問い合わせが失敗しました: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "問い合わせ: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "詳細は\"%s --help\"で確認してください。\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "コマンドライン引数が多すぎます (先頭は\"%s\")"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "全データベースと特定のデータベースを同時にクラスタ化することはできません"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "すべてのデータベースの特定のテーブル(群)はクラスタ化できません"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"のテーブル\"%1$s\"のクラスタ化に失敗しました: %3$s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "データベース\"%s\"のクラスタ化に失敗しました: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: データベース\"%s\"をクラスタ化しています\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr "%sはデータベース内で事前にクラスタ化されているすべてのテーブルをクラスタ化します\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "使用方法:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [オプション]... [データベース名]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"オプション:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all すべてのデータベースをクラスタ化\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME クラスタ化するデータベース\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo サーバーへ送信されているコマンドを表示\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet メッセージを何も出力しない\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=テーブル名 指定したテーブル(群)のみをクラスタ化\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 多くのメッセージを出力\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"接続オプション:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOSTNAME データベースサーバーのホストまたはソケット\n"
+" ディレクトリ\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT データベースサーバーのポート番号\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME このユーザー名で接続\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password パスワード入力を要求しない\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password パスワードプロンプトを強制表示\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 別の保守用データベースを指定\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"詳細は SQL コマンドの CLUSTER の説明を参照してください。\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"バグは<%s>に報告してください。\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s ホームページ: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "問い合わせが1行ではなく%d行返しました: %s"
+msgstr[1] "問い合わせが1行ではなく%d行返しました: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s)"
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "\"%s\"または\"%s\"で答えてください。\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "--locale か --lc-ctype のいずれか一方のみを指定してください"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "--locale か --lc-collate のいずれか一方のみを指定してください"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\"は有効な符号化方式名ではありません"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "データベースの生成に失敗しました: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "コメントの生成に失敗(データベースは生成されました): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLデータベースを生成します。\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [オプション]... [データベース名] [説明]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE データベースのデフォルトテーブルスペース名\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo サーバーに送られるコマンドを表示\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING データベースの符号化方式\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE データベースのロケール設定\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE データベースのLC_COLLATE設定\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE データベースのLC_CTYPE設定\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER 新しいデータベースを所有するデータベースユーザー\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE コピーするテンプレートデータベース\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOSTNAME データベースサーバーホストまたはソケット\n"
+" ディレクトリ\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT データベースサーバーのポート番号\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 接続する際のユーザー名\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password パスワード入力を要求しない\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password パスワードプロンプトを強制\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 別の保守用データベースを指定\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"デフォルトでは、現在のユーザー名と同名のデータベースが生成されます\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "--connection-limit に対する不正な値: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "追加したいロール名を入力:"
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "新しいロールのためのパスワード: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "もう一度入力してください: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "パスワードが一致しませんでした。\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "新しいロールをスーパーユーザーにしますか?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "新しいロールに対してデータベースを作成する権限を与えますか?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "新しいロールに対して別のロールを作成する権限を与えますか?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "パスワードの暗号化に失敗しました: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "新しいロールの作成に失敗しました: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%sは新しいPostgreSQLロールを作成します\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [オプション]... [ロール名]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N ロールのコネクション数制限(デフォルト: 制限なし)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb ロールは新しいデータベースを作成可\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb ロールは新しいデータベースを作成不可(デフォルト)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE 新しいロールはこのロールのメンバーにする\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit ロールがメンバーとなるロール群から権限を継承\n"
+" (デフォルト)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit 権限を継承しない\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login ロールはログイン可能(デフォルト)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login ロールはログイン不可\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt 新しいロールにパスワードを割り当てる\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole ロールは別のロールを作成可\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole ロールは別のロールを作成不可(デフォルト)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser ロールをスーパーユーザーにする\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser ロールをスーパーユーザーにしない(デフォルト)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr " --interactive デフォルトを使わず未指定のロール名や属性は入力を促す\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication ロールはレプリケーションを初期化可\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication ロールはレプリケーションを初期化不可\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=ユーザー名 このユーザーとして接続(作成対象ユーザーでは\n"
+" ありません)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "必須の引数であるデータベース名がありません"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "データベース\"%s\"は永久に削除されます。\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "実行しますか?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "データベースの削除に失敗しました: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLデータベースを削除します。\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [オプション]... [データベース名]\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force 削除前に他の接続の終了を試行\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive 何かを削除する前に警告\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists データベースが存在しない場合にエラーを報告しない\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "削除したいロール名を入力:"
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "必須の引数であるロール名がありません"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "ロール\"%s\"は永久に削除されます\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "ロール\"%s\"の削除に失敗しました: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLのロールを削除します\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive 何かを削除する前に入力を促し、またロール名が指定\n"
+" されていない場合はその入力を促す\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists ユーザーが存在しない場合にエラーを報告しない\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=ユーザー名 このユーザーとして接続(削除対象ユーザーでは\n"
+" ありません)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "デフォルトのオプションを取り出すことができませんでした"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "接続を受け付けています\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "接続を拒絶しています\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "レスポンスがありません\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "施行がありません\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "不明\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLデータベースに対して接続検査を発行します\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [オプション]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME データベース名\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet メッセージを出力せずに実行\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME データベースサーバーのホストまたはソケットディレクトリ\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT データベースサーバーのポート番号\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SECS 接続試行時の待機秒数、ゼロで無効化(デフォルト: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME このユーザー名で接続\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "並列ジョブの数は最低でも1以上でなければなりません"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "全データベースと特定のデータベースは同時に再インデックス化はできません"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "全データベースとシステムカタログの両方は同時に再インデックス化はできません"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "全データベースにおける特定のスキーマ(群)の再インデックス化はできません"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "全データベースにおける特定のテーブル(群)の再インデックス化はできません"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "全データベースにおける特定のインデックス(群)の再作成はできません"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "特定のスキーマ(群)とシステムカタログは同時に再インデックス化はできません"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "特定のテーブル(群)とシステムカタログは同時に再インデックス化はできません"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "特定のインデックスとシステムカタログは同時に再インデックス化はできません"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "システムカタログのインデックス再構築では複数ジョブを使用できません"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "インデックス再構築には複数ジョブを使用できません"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "PostgreSQL %2$sよりも古いサーバーバージョンでは\"%1$s\"オプションは使えません"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "データベース\"%s\"のインデックス再構築に失敗しました: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"中にあるインデックス\"%1$s\"の再作成に失敗しました: %3$s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"中にあるスキーマ\"%1$s\"のインデックス再構築に失敗しました: %3$s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "データベース\"%s\"中のシステムカタログのインデックス再構築に失敗しました: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"中にあるテーブル\"%1$s\"のインでックス再構築に失敗しました: %3$s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: データベース\"%s\"を再インデックス化しています\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%sはPostgreSQLデータベースのインデックス再構築を行います。\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all 全データベースのインデックス再構築を行う\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently 再構築の並行実行\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME インデックス再構築対象のデータベース名\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX 指定したインデックス(群)のみインデックス再構築\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM インデックス再構築の並列接続数を指定\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet メッセージを出力しない\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system システムカタログのインデックスのみを再構築\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA 指定したスキーマ(群)のみでインデックス再構築\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE 指定したテーブル(群)のみでインデックス再構築\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " -D, --tablespace=TABLESPACE インデックス再構築先のテーブルスペース\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 多くのメッセージを出力\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"詳細はSQLコマンドREINDEXに関する説明を参照してください。\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "VACUUMの並列ワーカー数は0以上でなければなりません"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "最小トランザクションID差分は1以上でなければなりません"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "最小マルチトランザクションID差分は1以上でなくてはなりません"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "analyzeのみを実行する場合\"%s\"は使えません"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "完全VACUUMを実行する場合\"%s\"オプションは使えません"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "\"%s\"オプションは\"%s\"オプションと同時には使用できません"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "全データベースと特定のデータベースを同時にVACUUMすることはできません"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "全データベースの特定のテーブル(群)をVACUUMすることはできません"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "最適化のための情報を最小限生成します(1対象)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "最適化のための情報を複数生成します(10対象)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "最適化のための情報をデフォルト数(全て)生成します"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: データベース\"%s\"の処理中です: %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: データベース\"%s\"をVACUUMしています\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース \"%2$s\"のテーブル\"%1$sのVACUUMに失敗しました: %3$s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "データベース\"%s\"のVACUUMに失敗しました: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr "%sはPostgreSQLデータベースのゴミ回収および分析を行います。\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all 全データベースをVACUUM\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME VACUUMするデータベース名\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping すべてのページスキップ動作を禁止\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo サーバーに送られるコマンドを表示\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full VACUUM FULLを実行\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze 行トランザクション情報を凍結\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr ""
+" --force-index-cleanup デッドタプルを指すインデックスエントリを\n"
+" 必ず削除\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM バキューム時に指定した同時接続数を使用\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr ""
+" --min-mxid-age=MXID_AGE VACUUM対象とするテーブルの最小のマルチ\n"
+" トランザクションID差分\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr ""
+" --min-xid-age=XID_AGE VACUUM対象とするテーブルの最小の\n"
+" トランザクションID差分\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr ""
+" --no-index-cleanup デッドタプルを指すインデックスエントリを\n"
+" 削除しない\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr ""
+" --no-process-toast VACUUM対象テーブルに対応するTOASTテーブルを\n"
+" スキップ\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate テーブル終端の空ページの切り詰めを行わない\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=PARALLEL_WORKERS 可能であればこの数のバックグラウンドワーカーを\n"
+" VACUUMで使用\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet メッセージを出力しない\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked 直ちにロックできなかったリレーションをスキップ\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLUMNS)]' 指定したテーブル(複数可)のみをVACUUMする\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 多くのメッセージを出力\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze 最適化用統計情報を更新します\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only 最適化用統計情報のみ更新; バキュームは行わない\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages 高速化のため最適化用統計情報のみを複数段階で\n"
+" 更新; VACUUMは行わない\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"詳細はSQLコマンドのVACUUMの説明を参照してください。\n"
diff --git a/src/bin/scripts/po/ko.po b/src/bin/scripts/po/ko.po
new file mode 100644
index 0000000..7593dcf
--- /dev/null
+++ b/src/bin/scripts/po/ko.po
@@ -0,0 +1,1199 @@
+# Korean message translation file for PostgreSQL pgscripts
+# Ioseph Kim <ioseph@uri.sarang.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-10-05 20:45+0000\n"
+"PO-Revision-Date: 2020-10-13 15:50+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"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "심각: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "오류: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "경고: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "메모리 부족\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "null 포인터를 복제할 수 없음(내부 오류)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "UID %ld 해당하는 사용자를 찾을 수 없음: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "사용자 없음"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "사용자 이름 찾기 실패: 오류번호 %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "취소 요청을 전송함\n"
+
+#: ../../fe_utils/cancel.c:165
+msgid "Could not send cancel request: "
+msgstr "취소 요청을 전송할 수 없음: "
+
+#: ../../fe_utils/cancel.c:210
+#, c-format
+msgid "Could not send cancel request: %s"
+msgstr "취소 요청을 전송할 수 없음: %s"
+
+#: ../../fe_utils/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu개 행)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "인트럽트발생\n"
+
+#: ../../fe_utils/print.c:3119
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "테이블 내용에 헤더를 추가할 수 없음: 열 수가 %d개를 초과했습니다.\n"
+
+#: ../../fe_utils/print.c:3159
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "테이블 내용에 셀을 추가할 수 없음: 총 셀 수가 %d개를 초과했습니다.\n"
+
+#: ../../fe_utils/print.c:3414
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "잘못된 출력 형식 (내부 오류): %d"
+
+#: clusterdb.c:114 clusterdb.c:133 createdb.c:121 createdb.c:140
+#: createuser.c:171 createuser.c:186 dropdb.c:101 dropdb.c:110 dropdb.c:118
+#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109
+#: reindexdb.c:168 reindexdb.c:187 vacuumdb.c:227 vacuumdb.c:246
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "보다 자세한 사용법은 \"%s --help\"\n"
+
+#: clusterdb.c:131 createdb.c:138 createuser.c:184 dropdb.c:116 dropuser.c:105
+#: pg_isready.c:107 reindexdb.c:185 vacuumdb.c:244
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "명령행 인자를 너무 많이 지정했습니다 (시작: \"%s\")"
+
+#: clusterdb.c:143
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "모든 DB 작업과 특정 DB 작업은 동시에 할 수 없습니다."
+
+#: clusterdb.c:149
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "모든 DB를 대상으로 특정 테이블들을 클러스터할 수 없음"
+
+#: clusterdb.c:217
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%s\" 테이블(해당DB: \"%s\") 클러스터 작업 실패: %s"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "\"%s\" 데이터베이스 클러스터 실패: %s"
+
+#: clusterdb.c:253
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: \"%s\" 데이터베이스 클러스터 작업 중\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 DB 안에서 이전에 클러스터된 모든 테이블을 찾아\n"
+"다시 클러스터 작업을 합니다.\n"
+"\n"
+
+#: clusterdb.c:275 createdb.c:259 createuser.c:347 dropdb.c:164 dropuser.c:163
+#: pg_isready.c:224 reindexdb.c:753 vacuumdb.c:921
+#, c-format
+msgid "Usage:\n"
+msgstr "사용법:\n"
+
+#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [옵션]... [DB이름]\n"
+
+#: clusterdb.c:277 createdb.c:261 createuser.c:349 dropdb.c:166 dropuser.c:165
+#: pg_isready.c:227 reindexdb.c:755 vacuumdb.c:923
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"옵션들:\n"
+
+#: clusterdb.c:278
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all 모든 데이터베이스를 대상으로\n"
+
+#: clusterdb.c:279
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME 클러스터 작업할 DB\n"
+
+#: clusterdb.c:280 createuser.c:353 dropdb.c:167 dropuser.c:166 reindexdb.c:759
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 서버로 보내는 작업 명령을 보여줌\n"
+
+#: clusterdb.c:281 reindexdb.c:762
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 어떠한 메시지도 보여주지 않음\n"
+
+#: clusterdb.c:282
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE 지정한 테이블들만 클러스터\n"
+
+#: clusterdb.c:283 reindexdb.c:766
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 많은 출력 작성\n"
+
+#: clusterdb.c:284 createuser.c:365 dropdb.c:170 dropuser.c:169 reindexdb.c:767
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 버전 정보를 보여주고 마침\n"
+
+#: clusterdb.c:285 createuser.c:370 dropdb.c:172 dropuser.c:171 reindexdb.c:768
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 이 도움말을 보여주고 마침\n"
+
+#: clusterdb.c:286 createdb.c:272 createuser.c:371 dropdb.c:173 dropuser.c:172
+#: pg_isready.c:233 reindexdb.c:769 vacuumdb.c:944
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"연결 옵션들:\n"
+
+#: clusterdb.c:287 createuser.c:372 dropdb.c:174 dropuser.c:173 reindexdb.c:770
+#: vacuumdb.c:945
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOSTNAME 데이터베이스 서버 호스트 또는 소켓 디렉터리\n"
+
+#: clusterdb.c:288 createuser.c:373 dropdb.c:175 dropuser.c:174 reindexdb.c:771
+#: vacuumdb.c:946
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 데이터베이스 서버 포트\n"
+
+#: clusterdb.c:289 dropdb.c:176 reindexdb.c:772 vacuumdb.c:947
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 접속할 사용자이름\n"
+
+#: clusterdb.c:290 createuser.c:375 dropdb.c:177 dropuser.c:176 reindexdb.c:773
+#: vacuumdb.c:948
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n"
+
+#: clusterdb.c:291 createuser.c:376 dropdb.c:178 dropuser.c:177 reindexdb.c:774
+#: vacuumdb.c:949
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 암호 프롬프트 표시함\n"
+
+#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:950
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 대체용 관리 대상 데이터베이스\n"
+
+#: clusterdb.c:293
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"보다 자세한 내용은 CLUSTER SQL 명령어 설명서를 참조하십시오.\n"
+
+#: clusterdb.c:294 createdb.c:280 createuser.c:377 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:238 reindexdb.c:777 vacuumdb.c:952
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"문제점 보고 주소: <%s>\n"
+
+#: clusterdb.c:295 createdb.c:281 createuser.c:378 dropdb.c:181 dropuser.c:179
+#: pg_isready.c:239 reindexdb.c:778 vacuumdb.c:953
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 홈페이지: <%s>\n"
+
+#: common.c:79 common.c:125
+msgid "Password: "
+msgstr "암호:"
+
+#: common.c:112
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "%s 데이터베이스에 연결 할 수 없음: 메모리 부족"
+
+#: common.c:139
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "%s 데이터베이스에 연결 할 수 없음: %s"
+
+#: common.c:214 common.c:239
+#, c-format
+msgid "query failed: %s"
+msgstr "쿼리 실패: %s"
+
+#: common.c:215 common.c:240
+#, c-format
+msgid "query was: %s"
+msgstr "사용한 쿼리: %s"
+
+#: common.c:312
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "\"%s\" 데이터베이스 작업 실패: %s"
+
+#: common.c:406
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "쿼리에서 한 개가 아닌 %d개의 행을 반환: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:430
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:432
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:442
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:456
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "\"%s\" 또는 \"%s\" 만 허용합니다.\n"
+
+#: createdb.c:148
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "--locale 및 --lc-ctype 중 하나만 지정할 수 있음"
+
+#: createdb.c:153
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "--locale 및 --lc-collate 중 하나만 지정할 수 있음"
+
+#: createdb.c:164
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" 이름은 잘못된 인코딩 이름임"
+
+#: createdb.c:221
+#, c-format
+msgid "database creation failed: %s"
+msgstr "데이터베이스 만들기 실패: %s"
+
+#: createdb.c:240
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "코멘트 추가하기 실패 (데이터베이스는 만들어졌음): %s"
+
+#: createdb.c:258
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 데이터베이스를 만듭니다.\n"
+"\n"
+
+#: createdb.c:260
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [옵션]... [DB이름] [설명]\n"
+
+#: createdb.c:262
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr ""
+" -D, --tablespace=TABLESPACE 데이터베이스를 위한 기본 테이블스페이스\n"
+
+#: createdb.c:263
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 서버로 보내는 작업 명령들을 보여줌\n"
+
+#: createdb.c:264
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING 데이터베이스 인코딩\n"
+
+#: createdb.c:265
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE 데이터베이스의 로캘 설정\n"
+
+#: createdb.c:266
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE 데이터베이스의 LC_COLLATE 설정\n"
+
+#: createdb.c:267
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE 데이터베이스의 LC_CTYPE 설정\n"
+
+#: createdb.c:268
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER 데이터베이스 소유주\n"
+
+#: createdb.c:269
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE 복사할 템플릿 데이터베이스\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 버전 정보를 보여주고 마침\n"
+
+#: createdb.c:271
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 이 도움말을 보여주고 마침\n"
+
+#: createdb.c:273
+#, c-format
+msgid ""
+" -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOSTNAME 데이터베이스 서버 호스트나 소켓 디렉터리\n"
+
+#: createdb.c:274
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 데이터베이스 서버 포트\n"
+
+#: createdb.c:275
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 접속할 사용자\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 암호 프롬프트 표시 안 함\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 암호 프롬프트 표시함\n"
+
+#: createdb.c:278
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 대체용 관리 대상 데이터베이스\n"
+
+#: createdb.c:279
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"초기값으로, DB이름을 지정하지 않으면, 현재 사용자의 이름과 같은 데이터베이스"
+"가 만들어집니다.\n"
+
+#: createuser.c:150
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "--connection-limit 옵션 값이 잘못됨: %s"
+
+#: createuser.c:194
+msgid "Enter name of role to add: "
+msgstr "추가할 새 롤(role)이름: "
+
+#: createuser.c:211
+msgid "Enter password for new role: "
+msgstr "새 롤의 암호: "
+
+#: createuser.c:213
+msgid "Enter it again: "
+msgstr "암호 확인: "
+
+#: createuser.c:216
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "암호가 서로 틀림.\n"
+
+#: createuser.c:224
+msgid "Shall the new role be a superuser?"
+msgstr "새 롤을 superuser 권한으로 지정할까요?"
+
+#: createuser.c:239
+msgid "Shall the new role be allowed to create databases?"
+msgstr "이 새 롤에게 데이터베이스를 만들 수 있는 권할을 줄까요?"
+
+#: createuser.c:247
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "이 새 롤에게 또 다른 롤을 만들 수 있는 권한을 줄까요?"
+
+#: createuser.c:277
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "암호 암호화 실패: %s"
+
+#: createuser.c:332
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "새 롤 만들기 실패: %s"
+
+#: createuser.c:346
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 롤을 만듭니다.\n"
+"\n"
+
+#: createuser.c:348 dropuser.c:164
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [옵션]... [롤이름]\n"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+" -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N 연결 제한 수 (초기값: 무제한)\n"
+
+#: createuser.c:351
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb 새 데이터베이스를 만들 수 있음\n"
+
+#: createuser.c:352
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr ""
+" -D, --no-createdb 데이터베이스를 만들 수 있는 권한 없음 (초기값)\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE 만들어지는 롤이 이 롤의 구성원이 됨\n"
+
+#: createuser.c:355
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit 롤의 권한을 상속할 수 있음\n"
+" (초기값)\n"
+
+#: createuser.c:357
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit 이 롤의 권한을 상속할 수 없음\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login 로그인 허용 (초기값)\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login 로그인 할 수 없음\n"
+
+#: createuser.c:360
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt 새 롤의 암호 지정\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole 새 롤을 만들 수 있음\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole 롤 만들 수 있는 권한 없음 (초기값)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser superuser 권한으로 지정\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser 슈퍼유저 권한 없음 (초기값)\n"
+
+#: createuser.c:366
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes "
+"rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive 롤 이름과 속성을 초기값을 쓰지 않고\n"
+" 각각 직접 입력 선택 함\n"
+
+#: createuser.c:368
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication 복제 기능 이용할 수 있는 롤\n"
+
+#: createuser.c:369
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication 복제 기능을 이용할 수 없음\n"
+
+#: createuser.c:374
+#, c-format
+msgid ""
+" -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=USERNAME 서버에 접속할 사용자\n"
+" (사용자만들기 작업을 할 사용자)\n"
+
+#: dropdb.c:109
+#, c-format
+msgid "missing required argument database name"
+msgstr "필수 항목인 데이터베이스 이름이 빠졌습니다"
+
+#: dropdb.c:124
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "\"%s\" 데이터베이스가 완전히 삭제 될 것입니다.\n"
+
+#: dropdb.c:125 dropuser.c:130
+msgid "Are you sure?"
+msgstr "정말 계속 할까요? (y/n) "
+
+#: dropdb.c:149
+#, c-format
+msgid "database removal failed: %s"
+msgstr "데이터베이스 삭제 실패: %s"
+
+#: dropdb.c:163
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 데이터베이스를 삭제합니다.\n"
+"\n"
+
+#: dropdb.c:165
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [옵션]... DB이름\n"
+
+#: dropdb.c:168
+#, c-format
+msgid ""
+" -f, --force try to terminate other connections before "
+"dropping\n"
+msgstr ""
+" -f, --force 삭제 전에 접속한 다른 세션들 강제로 끊음\n"
+
+#: dropdb.c:169
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive 지우기 전에 한 번 더 물어봄\n"
+
+#: dropdb.c:171
+#, c-format
+msgid ""
+" --if-exists don't report error if database doesn't exist\n"
+msgstr ""
+" --if-exists 해당 데이터베이스가 없어도 오류를 보고하지 않음\n"
+
+#: dropuser.c:115
+msgid "Enter name of role to drop: "
+msgstr "삭제할 롤 이름을 입력하십시오: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "롤 이름은 필수 입력 인자입니다"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "\"%s\" 롤은 영구히 삭제될 것입니다.\n"
+
+#: dropuser.c:147
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "\"%s\" 롤 삭제 실패: %s"
+
+#: dropuser.c:162
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 롤을 삭제합니다.\n"
+"\n"
+
+#: dropuser.c:167
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive 롤 이름을 입력하지 않았다면,\n"
+" 해당 이름을 물어봄\n"
+
+#: dropuser.c:170
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists 해당 롤이 없어도 오류를 보고하지 않음\n"
+
+#: dropuser.c:175
+#, c-format
+msgid ""
+" -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=USERNAME 이 작업을 진행할 DB에 접속할 사용자\n"
+
+#: pg_isready.c:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "기본 옵션 값을 가져올 수 없음"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "접속을 받아드리는 중\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "접속을 거절하는 중\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "응답 없음\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "시도 없음\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "알수없음\n"
+
+#: pg_isready.c:223
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 데이터베이스 접속을 검사합니다.\n"
+"\n"
+
+#: pg_isready.c:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [옵션]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME 데이터베이스 이름\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet 조용히 실행함\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 버전 정보를 보여주고 마침\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 이 도움말을 보여주고 마침\n"
+
+#: pg_isready.c:234
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOSTNAME 접속할 데이터베이스 서버 또는 소켓 디렉터리\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 데이터베이스 서버 포트\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid ""
+" -t, --timeout=SECS seconds to wait when attempting connection, 0 "
+"disables (default: %s)\n"
+msgstr " -t, --timeout=초 연결 제한 시간, 0 무제한 (초기값: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 접속할 사용자이름\n"
+
+#: reindexdb.c:154 vacuumdb.c:186
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "병렬 작업 숫자는 최소 1이어야 함"
+
+#: reindexdb.c:197
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr ""
+"모든 데이터베이스 재색인 작업과 특정 데이터베이스 재색인 작업은 동시에 진행"
+"할 수 없습니다"
+
+#: reindexdb.c:202
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr ""
+"모든 데이터베이스 재색인 작업과 시스템 카탈로그 재색인 작업은 동시에 진행할 "
+"수 없습니다"
+
+#: reindexdb.c:207
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr ""
+"모든 데이터베이스 재색인 작업에서 특정 스키마들의 재색인 작업을 지정할 수 없"
+"습니다"
+
+#: reindexdb.c:212
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr ""
+"모든 데이터베이스 재색인 작업에서 특정 테이블의 재색인 작업을 지정할 수 없습"
+"니다"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr ""
+"모든 데이터베이스 재색인 작업에서 특정 인덱스 재색인 작업을 지정할 수 없습니"
+"다"
+
+#: reindexdb.c:229
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "특정 스키마와 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다"
+
+#: reindexdb.c:234
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "특정 테이블과 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다"
+
+#: reindexdb.c:239
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "특정 인덱스와 시스템 카탈로그 재색인 작업은 동시에 진행할 수 없습니다"
+
+#: reindexdb.c:245
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "시스템 카탈로그 재색인 작업은 병렬로 처리할 수 없음"
+
+#: reindexdb.c:272
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "인덱스 다시 만들기에서는 다중 작업을 사용할 수 없음"
+
+#: reindexdb.c:337 vacuumdb.c:410 vacuumdb.c:418 vacuumdb.c:425 vacuumdb.c:432
+#: vacuumdb.c:439
+#, c-format
+msgid ""
+"cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr ""
+"\"%s\" 옵션은 PostgreSQL %s 버전보다 오래된 서버에서는 사용할 수 없음"
+
+#: reindexdb.c:377
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "시스템 카탈로그 인덱스는 CONCURRENTLY 다시 만들기 못함, 모두 건너 뜀"
+
+#: reindexdb.c:558
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "\"%s\" 데이터베이스 재색인 작업 실패: %s"
+
+#: reindexdb.c:562
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%s\" 인덱스(해당DB: \"%s\") 재색인 작업 실패: %s"
+
+#: reindexdb.c:566
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%s\" 스키마(해당DB: \"%s\") 재색인 작업 실패: %s"
+
+#: reindexdb.c:570
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "\"%s\" 데이터베이스 시스템 카탈로그 재색인 작업 실패: %s"
+
+#: reindexdb.c:574
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%s\" 테이블(해당DB: \"%s\") 재색인 작업 실패: %s"
+
+#: reindexdb.c:731
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: \"%s\" 데이터베이스 재색인 작업 중\n"
+
+#: reindexdb.c:752
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 데이터베이스 재색인 작업을 합니다.\n"
+"\n"
+
+#: reindexdb.c:756
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all 모든 데이터베이스 재색인\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently 테이블 잠그지 않는 재색인\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME 지정한 데이터베이스의 재색인 작업\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX 지정한 인덱스들만 다시 만듬\n"
+
+#: reindexdb.c:761
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NUM 재색인 작업을 여러개의 연결로 동시에 작업함\n"
+
+#: reindexdb.c:763
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system 시스템 카탈로그 재색인\n"
+
+#: reindexdb.c:764
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA 지정한 스키마들 자료만 덤프\n"
+
+#: reindexdb.c:765
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE 지정한 테이블들만 재색인 작업\n"
+
+#: reindexdb.c:776
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"보다 자세한 내용은 REINDEX SQL 명령어 설명서를 참조하십시오.\n"
+
+#: scripts_parallel.c:234
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "이 운영체제에서는 너무 많은 동시 작업임 -- %d 시도"
+
+#: vacuumdb.c:194
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "병렬 vacuum 값은 0 이상 정수형이어야 함"
+
+#: vacuumdb.c:214
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "트랜잭션 ID 나이는 최소 1이어야 함"
+
+#: vacuumdb.c:222
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "multixact ID 나이는 최소 1이어야 함"
+
+#: vacuumdb.c:254 vacuumdb.c:260 vacuumdb.c:266 vacuumdb.c:278
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "통계 수집 전용 작업에서는 \"%s\" 옵션을 사용할 수 없음"
+
+#: vacuumdb.c:284
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "full vacuum 작업에서는 \"%s\" 옵션을 사용할 수 없음"
+
+#: vacuumdb.c:300
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr ""
+"-a 옵션이 있을 경우는 한 데이터베이스를 대상으로 작업을 진행할 수 없습니다."
+
+#: vacuumdb.c:305
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "모든 데이터베이스를 대상으로 특정 테이블들을 청소할 수는 없음"
+
+#: vacuumdb.c:396
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "최소 최적화 통계 수집 수행 중 (1% 대상)"
+
+#: vacuumdb.c:397
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "일반 최적화 통계 수집 수행 중 (10% 대상)"
+
+#: vacuumdb.c:398
+msgid "Generating default (full) optimizer statistics"
+msgstr "최대 최적화 통계 수집 수행중 (모든 자료 대상)"
+
+#: vacuumdb.c:447
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: \"%s\" 데이터베이스 작업 중: %s\n"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: \"%s\" 데이터베이스를 청소 중\n"
+
+#: vacuumdb.c:909
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%s\" 테이블 (해당 DB: \"%s\") 청소하기 실패: %s"
+
+#: vacuumdb.c:912
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "\"%s\" 데이터베이스 청소하기 실패: %s"
+
+#: vacuumdb.c:920
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 프로그램은 PostgreSQL 데이터베이스 자료 정리 및\n"
+"퀴리 최적화기의 참고 자료를 갱신합니다.\n"
+"\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all 모든 데이터베이스 청소\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME DBNAME 데이터베이스 청소\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping 모든 page-skipping 기능 비활성화\n"
+
+#: vacuumdb.c:927
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the "
+"server\n"
+msgstr " -e, --echo 서버로 보내는 명령들을 보여줌\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full 대청소\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze 행 트랜잭션 정보 동결\n"
+
+#: vacuumdb.c:930
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to "
+"vacuum\n"
+msgstr ""
+" -j, --jobs=NUM 청소 작업을 여러개의 연결로 동시에 작업함\n"
+
+#: vacuumdb.c:931
+#, c-format
+msgid ""
+" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to "
+"vacuum\n"
+msgstr ""
+" --min-mxid-age=MXID_AGE 청소할 테이블의 최소 multixact ID 나이\n"
+
+#: vacuumdb.c:932
+#, c-format
+msgid ""
+" --min-xid-age=XID_AGE minimum transaction ID age of tables to "
+"vacuum\n"
+msgstr ""
+" --min-xid-age=XID_AGE 청소할 테이블의 최소 트랜잭션 ID 나이\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid ""
+" -P, --parallel=PARALLEL_DEGREE use this many background workers for "
+"vacuum, if available\n"
+msgstr ""
+" -P, --parallel=병렬작업수 vacuum 작업을 병렬로 처리 할 수 있는 경우\n"
+" 백그라운드 작업 프로세스 수\n"
+
+#: vacuumdb.c:934
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 어떠한 메시지도 보여주지 않음\n"
+
+#: vacuumdb.c:935
+#, c-format
+msgid ""
+" --skip-locked skip relations that cannot be immediately "
+"locked\n"
+msgstr ""
+" --skip-locked 즉시 잠글 수 없는 릴레이션은 건너 뜀\n"
+
+#: vacuumdb.c:936
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLUMNS)]' 지정한 특정 테이블들만 청소\n"
+
+#: vacuumdb.c:937
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 작업내역의 자세한 출력\n"
+
+#: vacuumdb.c:938
+#, c-format
+msgid ""
+" -V, --version output version information, then exit\n"
+msgstr " -V, --version 버전 정보를 보여주고 마침\n"
+
+#: vacuumdb.c:939
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze 쿼리최적화 통계 정보를 갱신함\n"
+
+#: vacuumdb.c:940
+#, c-format
+msgid ""
+" -Z, --analyze-only only update optimizer statistics; no "
+"vacuum\n"
+msgstr ""
+" -Z, --analyze-only 청소 작업 없이 쿼리최적화 통계 정보만 갱신"
+"함\n"
+
+#: vacuumdb.c:941
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in "
+"multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages 보다 빠른 결과를 위해 다중 스테이지에서\n"
+" 최적화 통계치만 갱신함;청소 안함\n"
+
+#: vacuumdb.c:943
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 이 도움말을 표시하고 종료\n"
+
+#: vacuumdb.c:951
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"보다 자세한 내용은 VACUUM SQL 명령어 설명서를 참조하십시오.\n"
diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po
new file mode 100644
index 0000000..c5fa31f
--- /dev/null
+++ b/src/bin/scripts/po/ru.po
@@ -0,0 +1,1431 @@
+# Russian message translation file for pgscripts
+# Copyright (C) 2003-2016 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Serguei A. Mokhov, <mokhov@cs.concordia.ca>, 2003-2004.
+# Oleg Bartunov <oleg@sai.msu.su>, 2004.
+# Alexander Lakhin <exclusion@gmail.com>, 2012-2017, 2019, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL current)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-05-07 06:06+0300\n"
+"PO-Revision-Date: 2021-11-08 05:30+0300\n"
+"Last-Translator: Alexander Lakhin <exclusion@gmail.com>\n"
+"Language-Team: Russian <pgsql-ru-general@postgresql.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "важно: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "ошибка: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "предупреждение: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "нехватка памяти\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "попытка дублирования нулевого указателя (внутренняя ошибка)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "выяснить эффективный идентификатор пользователя (%ld) не удалось: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "пользователь не существует"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "распознать имя пользователя не удалось (код ошибки: %lu)"
+
+#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238
+msgid "Cancel request sent\n"
+msgstr "Сигнал отмены отправлен\n"
+
+#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239
+msgid "Could not send cancel request: "
+msgstr "Отправить сигнал отмены не удалось: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Пароль: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "не удалось подключиться к базе %s (нехватка памяти)"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "слишком много заданий для этой платформы"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "ошибка при обработке базы \"%s\": %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu строка)"
+msgstr[1] "(%lu строки)"
+msgstr[2] "(%lu строк)"
+
+#: ../../fe_utils/print.c:3040
+#, c-format
+msgid "Interrupted\n"
+msgstr "Прервано\n"
+
+#: ../../fe_utils/print.c:3104
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr ""
+"Ошибка добавления заголовка таблицы: превышен предел числа столбцов (%d).\n"
+
+#: ../../fe_utils/print.c:3144
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr ""
+"Ошибка добавления ячейки в таблицу: превышен предел числа ячеек (%d).\n"
+
+#: ../../fe_utils/print.c:3402
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "неверный формат вывода (внутренняя ошибка): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "ошибка при выполнении запроса: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "запрос: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Для дополнительной информации попробуйте \"%s --help\".\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "слишком много аргументов командной строки (первый: \"%s\")"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "нельзя кластеризовать все базы и одну конкретную одновременно"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "нельзя кластеризовать указанную таблицу(ы) во всех базах"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "кластеризовать таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "кластеризовать базу \"%s\" не удалось: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: кластеризация базы \"%s\"\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s упорядочивает данные всех кластеризованных таблиц в базе данных.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Использование:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Параметры:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all кластеризовать все базы\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=ИМЯ_БД имя базы данных для кластеризации\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo отображать команды, отправляемые серверу\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не выводить никакие сообщения\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr ""
+" -t, --table=ТАБЛИЦА кластеризовать только указанную таблицу(ы)\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose выводить исчерпывающие сообщения\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Параметры подключения:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера баз данных\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для подключения к серверу\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password не запрашивать пароль\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password запросить пароль\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=ИМЯ_БД сменить опорную базу данных\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Подробнее о кластеризации вы можете узнать в описании SQL-команды CLUSTER.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Об ошибках сообщайте по адресу <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Домашняя страница %s: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "запрос вернул %d строку вместо одной: %s"
+msgstr[1] "запрос вернул %d строки вместо одной: %s"
+msgstr[2] "запрос вернул %d строк вместо одной: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s - да/%s - нет) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Пожалуйста, введите \"%s\" или \"%s\".\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "можно указать только --locale или --lc-ctype"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "можно указать только --locale и --lc-collate"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" не является верным названием кодировки"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "создать базу данных не удалось: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "создать комментарий не удалось (база данных была создана): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s создаёт базу данных PostgreSQL.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД] [ОПИСАНИЕ]\n"
+
+# well-spelled: ПРОСТР
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr ""
+" -D, --tablespace=ТАБЛ_ПРОСТР табличное пространство по умолчанию для базы "
+"данных\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the server\n"
+msgstr ""
+" -e, --echo отображать команды, отправляемые серверу\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=КОДИРОВКА кодировка базы данных\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=ЛОКАЛЬ локаль для базы данных\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для базы данных\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для базы данных\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr ""
+" -O, --owner=ВЛАДЕЛЕЦ пользователь-владелец новой базы данных\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=ШАБЛОН исходная база данных для копирования\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid ""
+" -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера баз данных\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для подключения к серверу\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password не запрашивать пароль\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password запросить пароль\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=ИМЯ_БД сменить опорную базу данных\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"По умолчанию именем базы данных считается имя текущего пользователя.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "неверное значение параметра --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Введите имя новой роли: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Введите пароль для новой роли: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Повторите его: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Пароли не совпадают.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Должна ли новая роль иметь полномочия суперпользователя?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Новая роль должна иметь право создавать базы данных?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Новая роль должна иметь право создавать другие роли?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "ошибка при шифровании пароля: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "создать роль не удалось: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s создаёт роль пользователя PostgreSQL.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_РОЛИ]\n"
+
+#: createuser.c:354
+#, c-format
+msgid ""
+" -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N предел подключений для роли\n"
+" (по умолчанию предела нет)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb роль с правом создания баз данных\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr ""
+" -D, --no-createdb роль без права создания баз данных (по "
+"умолчанию)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=РОЛЬ новая роль будет включена в эту роль\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit роль наследует права ролей (групп), в которые "
+"она\n"
+" включена (по умолчанию)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit роль не наследует права\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr ""
+" -l, --login роль с правом подключения к серверу (по "
+"умолчанию)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login роль без права подключения\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt назначить пароль новой роли\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole роль с правом создания других ролей\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr ""
+" -R, --no-createrole роль без права создания ролей (по умолчанию)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser роль с полномочиями суперпользователя\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr ""
+" -S, --no-superuser роль без полномочий суперпользователя (по "
+"умолчанию)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes "
+"rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive запрашивать отсутствующие атрибуты и имя роли,\n"
+" а не использовать значения по умолчанию\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication роль может инициировать репликацию\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication роль не может инициировать репликацию\n"
+
+#: createuser.c:378
+#, c-format
+msgid ""
+" -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для выполнения операции\n"
+" (но не имя новой роли)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "отсутствует необходимый аргумент: имя базы данных"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "База данных \"%s\" будет удалена безвозвратно.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Вы уверены? (y/n)"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "ошибка при удалении базы данных: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s удаляет базу данных PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [ПАРАМЕТР]... БД\n"
+
+#: dropdb.c:175
+#, c-format
+msgid ""
+" -f, --force try to terminate other connections before "
+"dropping\n"
+msgstr ""
+" -f, --force пытаться закрыть другие подключения перед "
+"удалением\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive подтвердить операцию удаления\n"
+
+#: dropdb.c:178
+#, c-format
+msgid ""
+" --if-exists don't report error if database doesn't exist\n"
+msgstr ""
+" --if-exists не считать ошибкой отсутствие базы данных\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Введите имя удаляемой роли: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "отсутствует необходимый аргумент: имя роли"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Роль \"%s\" будет удалена безвозвратно.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "ошибка при удалении роли \"%s\": %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s удаляет роль PostgreSQL.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive подтверждать операцию удаления и запрашивать\n"
+" имя роли, если оно не указано\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr ""
+" --if-exists не считать ошибкой отсутствие пользователя\n"
+
+#: dropuser.c:181
+#, c-format
+msgid ""
+" -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для выполнения операции\n"
+" (но не имя удаляемой роли)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "не удалось получить параметры по умолчанию"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "принимает подключения\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "отвергает подключения\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "нет ответа\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "проверка не выполнялась\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "неизвестно\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s проверяет подключение к базе данных PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [ПАРАМЕТР]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=БД имя базы\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet не выводить никакие сообщения\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера баз данных\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid ""
+" -t, --timeout=SECS seconds to wait when attempting connection, 0 "
+"disables (default: %s)\n"
+msgstr ""
+" -t, --timeout=СЕК время ожидания при попытке подключения;\n"
+" 0 - без ограничения (по умолчанию: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для подключения к серверу\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "число параллельных заданий должно быть не меньше 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr ""
+"нельзя переиндексировать все базы данных и одну конкретную одновременно"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать все базы данных и системные каталоги одновременно"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "нельзя переиндексировать указанную схему(ы) во всех базах"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "нельзя переиндексировать указанную таблицу(ы) во всех базах"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "нельзя переиндексировать указанный индекс(ы) во всех базах"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанную схему(ы) и системные каталоги одновременно"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанную таблицу(ы) и системные каталоги "
+"одновременно"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанный индекс(ы) и системные каталоги "
+"одновременно"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr ""
+"нельзя задействовать несколько заданий для переиндексирования системных "
+"каталогов"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "нельзя задействовать несколько заданий для перестроения индексов"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid ""
+"cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr ""
+"параметр \"%s\" нельзя использовать с серверами PostgreSQL версии старее %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr ""
+"все системные каталоги пропускаются, так как их нельзя переиндексировать "
+"неблокирующим способом"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "переиндексировать базу данных \"%s\" не удалось: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "перестроить индекс \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "переиндексировать схему \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "переиндексировать системные каталоги в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: переиндексация базы данных \"%s\"\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s переиндексирует базу данных PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all переиндексировать все базы данных\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr ""
+" --concurrently переиндексировать в неблокирующем режиме\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=БД имя базы для переиндексации\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr ""
+" -i, --index=ИНДЕКС пересоздать только указанный индекс(ы)\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to "
+"reindex\n"
+msgstr ""
+" -j, --jobs=ЧИСЛО запускать для переиндексации заданное число\n"
+" заданий\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не выводить сообщения\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr ""
+" -s, --system переиндексировать только системные каталоги\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr ""
+" -S, --schema=СХЕМА переиндексировать только указанную схему(ы)\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr ""
+" -t, --table=ТАБЛИЦА переиндексировать только указанную "
+"таблицу(ы)\n"
+
+# well-spelled: ПРОСТР
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr ""
+" --tablespace=ТАБЛ_ПРОСТР табличное пространство, в котором будут\n"
+" перестраиваться индексы\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose выводить исчерпывающие сообщения\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Подробнее о переиндексации вы можете узнать в описании SQL-команды REINDEX.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr ""
+"число параллельных исполнителей для выполнения очистки должно быть "
+"неотрицательным"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "минимальный возраст транзакций должен быть не меньше 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "минимальный возраст мультитранзакций должен быть не меньше 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "при выполнении только анализа нельзя использовать параметр \"%s\""
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "при выполнении полной очистки нельзя использовать параметр \"%s\""
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "параметр \"%s\" нельзя использовать совместно с \"%s\""
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "нельзя очистить все базы данных и одну конкретную одновременно"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "нельзя очистить только указанную таблицу(ы) во всех базах"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Вычисление минимальной статистики для оптимизатора (1 запись)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Вычисление средней статистики для оптимизатора (10 записей)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Вычисление стандартной (полной) статистики для оптимизатора"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: обработка базы данных \"%s\": %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: очистка базы данных \"%s\"\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "очистить таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "очистить базу данных \"%s\" не удалось: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s очищает и анализирует базу данных PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all очистить все базы данных\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr ""
+" --disable-page-skipping исключить все варианты пропуска страниц\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the "
+"server\n"
+msgstr ""
+" -e, --echo отображать команды, отправляемые серверу\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full произвести полную очистку\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr ""
+" -F, --freeze заморозить информацию о транзакциях в "
+"строках\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid ""
+" --force-index-cleanup always remove index entries that point to "
+"dead tuples\n"
+msgstr ""
+" --force-index-cleanup всегда удалять элементы индекса, "
+"указывающие\n"
+" на мёртвые кортежи\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to "
+"vacuum\n"
+msgstr ""
+" -j, --jobs=ЧИСЛО запускать для очистки заданное число "
+"заданий\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid ""
+" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to "
+"vacuum\n"
+msgstr ""
+" --min-mxid-age=ВОЗРАСТ минимальный возраст мультитранзакций для\n"
+" таблиц, подлежащих очистке\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid ""
+" --min-xid-age=XID_AGE minimum transaction ID age of tables to "
+"vacuum\n"
+msgstr ""
+" --min-xid-age=ВОЗРАСТ минимальный возраст транзакций для "
+"таблиц,\n"
+" подлежащих очистке\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid ""
+" --no-index-cleanup don't remove index entries that point to "
+"dead tuples\n"
+msgstr ""
+" --no-index-cleanup не удалять элементы индекса, указывающие\n"
+" на мёртвые кортежи\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid ""
+" --no-process-toast skip the TOAST table associated with the "
+"table to vacuum\n"
+msgstr ""
+" --no-process-toast пропускать TOAST-таблицу, связанную\n"
+" с очищаемой таблицей\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid ""
+" --no-truncate don't truncate empty pages at the end of "
+"the table\n"
+msgstr ""
+" --no-truncate не отсекать пустые страницы в конце "
+"таблицы\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid ""
+" -P, --parallel=PARALLEL_WORKERS use this many background workers for "
+"vacuum, if available\n"
+msgstr ""
+" -P, --parallel=ПАРАЛЛЕЛЬНЫЕ_ИСПОЛНИТЕЛИ\n"
+" по возможности использовать для очистки\n"
+" заданное число фоновых процессов\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не выводить сообщения\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid ""
+" --skip-locked skip relations that cannot be immediately "
+"locked\n"
+msgstr ""
+" --skip-locked пропускать отношения, которые не удаётся\n"
+" заблокировать немедленно\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr ""
+" -t, --table='ТАБЛ[(СТОЛБЦЫ)]' очистить только указанную таблицу(ы)\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose выводить исчерпывающие сообщения\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid ""
+" -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze обновить статистику оптимизатора\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid ""
+" -Z, --analyze-only only update optimizer statistics; no "
+"vacuum\n"
+msgstr ""
+" -Z, --analyze-only только обновить статистику оптимизатора,\n"
+" не очищать БД\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in "
+"multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages только пересчитать статистику для "
+"оптимизатора\n"
+" (в несколько проходов для большей "
+"скорости), без очистки\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Подробнее об очистке вы можете узнать в описании SQL-команды VACUUM.\n"
+
+#~ msgid "could not connect to database %s: %s"
+#~ msgstr "не удалось подключиться к базе %s: %s"
+
+#~ msgid "parallel vacuum degree must be a non-negative integer"
+#~ msgstr ""
+#~ "степень параллельности для очистки должна задаваться неотрицательным целым"
+
+#~ msgid "Could not send cancel request: %s"
+#~ msgstr "Отправить сигнал отмены не удалось: %s"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Об ошибках сообщайте по адресу <pgsql-bugs@lists.postgresql.org>.\n"
+
+#~ msgid "reindexing of system catalogs failed: %s"
+#~ msgstr "переиндексировать системные каталоги не удалось: %s"
+
+#~ msgid "%s: %s"
+#~ msgstr "%s: %s"
+
+#, fuzzy
+#~ msgid "%s: too many parallel jobs requested (maximum: %d)\n"
+#~ msgstr ""
+#~ "%s: запрошено слишком много параллельных заданий (при максимуме: %d)\n"
+
+#~ msgid "%s: invalid socket: %s"
+#~ msgstr "%s: неверный сокет: %s"
+
+#~ msgid " -E, --encrypted encrypt stored password\n"
+#~ msgstr " -E, --encrypted зашифровать сохранённый пароль\n"
+
+#~ msgid " -N, --unencrypted do not encrypt stored password\n"
+#~ msgstr " -N, --unencrypted не шифровать сохранённый пароль\n"
+
+#~ msgid "Name"
+#~ msgstr "Имя"
+
+#~ msgid "no"
+#~ msgstr "нет"
+
+#~ msgid "yes"
+#~ msgstr "да"
+
+#~ msgid "Trusted?"
+#~ msgstr "Доверенный?"
+
+#~ msgid "Procedural Languages"
+#~ msgstr "Процедурные языки"
+
+#~ msgid "%s: missing required argument language name\n"
+#~ msgstr "%s: отсутствует необходимый аргумент: название языка\n"
+
+#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n"
+#~ msgstr "%s: поддержка языка \"%s\" уже имеется в базе \"%s\"\n"
+
+#~ msgid "%s: language installation failed: %s"
+#~ msgstr "%s: установить поддержку языка не удалось: %s"
+
+#~ msgid ""
+#~ "%s installs a procedural language into a PostgreSQL database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s устанавливает поддержку процедурного языка в базу PostgreSQL.\n"
+#~ "\n"
+
+#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n"
+#~ msgstr " %s [ПАРАМЕТР]... ЯЗЫК [ИМЯ_БД]\n"
+
+#~ msgid " -d, --dbname=DBNAME database to install language in\n"
+#~ msgstr ""
+#~ " -d, --dbname=ИМЯ_БД база данных, куда будет установлен язык\n"
+
+#~ msgid ""
+#~ " -l, --list show a list of currently installed languages\n"
+#~ msgstr " -l, --list показать список установленных языков\n"
+
+#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n"
+#~ msgstr "%s: поддержка языка \"%s\" не установлена в базе данных\"%s\"\n"
+
+#~ msgid "%s: language removal failed: %s"
+#~ msgstr "%s: ошибка при удалении поддержки языка: %s"
+
+#~ msgid ""
+#~ "%s removes a procedural language from a database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s удаляет процедурный язык из базы данных.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ " -d, --dbname=DBNAME database from which to remove the language\n"
+#~ msgstr ""
+#~ " -d, --dbname=ИМЯ_БД база данных, из которой будет удалён язык\n"
+
+#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n"
+#~ msgstr ""
+#~ "%s: при выполнении только анализа нельзя использовать только \"freeze\"\n"
+
+#~ msgid "%s: could not obtain information about current user: %s\n"
+#~ msgstr "%s: не удалось получить информацию о текущем пользователе: %s\n"
+
+#~ msgid "%s: could not get current user name: %s\n"
+#~ msgstr "%s: не удалось узнать имя текущего пользователя: %s\n"
+
+#~ msgid " -U, --username=USERNAME database username\n"
+#~ msgstr " -U, --username=ИМЯ имя пользователя\n"
+
+#~ msgid "%s: out of memory\n"
+#~ msgstr "%s: нехватка памяти\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you "
+#~ "will\n"
+#~ "be prompted interactively.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Если параметры -d, -D, -r, -R, -s, -S или ИМЯ_РОЛИ не определены, вам "
+#~ "будет\n"
+#~ "предложено ввести их интерактивно.\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help показать эту справку и выйти\n"
+
+#~ msgid ""
+#~ " --version output version information, then exit\n"
+#~ msgstr " --version показать версию и выйти\n"
diff --git a/src/bin/scripts/po/sv.po b/src/bin/scripts/po/sv.po
new file mode 100644
index 0000000..aa7ba36
--- /dev/null
+++ b/src/bin/scripts/po/sv.po
@@ -0,0 +1,1170 @@
+# Swedish message translation file for postgresql
+# Dennis Björklund <db@zigo.dhs.org>, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020, 2021.
+# Peter Eisentraut <peter_e@gmx.net>, 2013.
+# Mats Erik Andersson <bsd@gisladisker.se>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-11-07 06:47+0000\n"
+"PO-Revision-Date: 2021-11-09 06:34+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"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "fatalt: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "fel: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "varning: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "slut på minne\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "kan inte duplicera null-pekare (internt fel)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "kunde inte slå upp effektivt användar-id %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "användaren finns inte"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "misslyckad sökning efter användarnamn: felkod %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Förfrågan om avbrytning skickad\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "Kunde inte skicka förfrågan om avbrytning: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Lösenord: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "kunde inte ansluta till databas %s: slut på minne"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "för många jobb för denna plattform"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "processande av databas \"%s\" misslyckades: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu rad)"
+msgstr[1] "(%lu rader)"
+
+#: ../../fe_utils/print.c:3039
+#, c-format
+msgid "Interrupted\n"
+msgstr "Avbruten\n"
+
+#: ../../fe_utils/print.c:3103
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Kan inte lägga till rubrik till tabellinnehåll: antal kolumner (%d) överskridet.\n"
+
+#: ../../fe_utils/print.c:3143
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Kan inte lägga till cell till tabellinnehåll: totala cellantalet (%d) överskridet.\n"
+
+#: ../../fe_utils/print.c:3401
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "ogiltigt utdataformat (internt fel): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "fråga misslyckades: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "frågan var: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Försök med \"%s --help\" för mer information.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "för många kommandoradsargument (första är \"%s\")"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "kan inte klustra alla databaser och en angiven på samma gång"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "kan inte klustra angivna tabeller i alla databaser"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "klustring av tabell \"%s\" i databas \"%s\" misslyckades: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "klustring av databas \"%s\" misslyckades: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: klustring av databas \"%s\"\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s klustrar alla tidigare klustrade tabeller i en databas.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Användning:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [FLAGGA]... [DBNAMN]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Flaggor:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all klustra alla databaser\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME databas att klustra\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo visa kommandon som skickas till servern\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet skriv inte ut några meddelanden\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABELL klustra enbart ingivna tabeller\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose skriv massor med utdata\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Flaggor för anslutning:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT databasserverns port\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ANVÄNDARE användarnamn att ansluta som\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password fråga ej efter lösenord\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password framtvinga fråga om lösenord\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAMN annat val av underhållsdatabas\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Läs beskrivningen av SQL-kommandot CLUSTER för detaljer.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapportera fel till <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "hemsida för %s: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "fråga gav %d rad istället för en: %s"
+msgstr[1] "fråga gav %d rader istället för en: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "j"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Var vänlig att svara \"%s\" eller \"%s\".\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "endast en av --locale och --lc-ctype kan anges"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "endast en av --locale och --lc-collate kan anges"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" är inte ett giltigt kodningsnamn"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "misslyckades att skapa databas: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "misslyckades att skapa kommentar (databasen skapades): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s skapar en PostgreSQL-databas.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [FLAGGA]... [DBNAMN] [BESKRIVNING]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABELLRYMD förvalt tabellutrymme för databasen\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo visa kommandon som skickas till servern\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=KODNING teckenkodning för databasen\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOKAL lokalnamn för databasen\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOKAL värde på LC_COLLATE för databasen\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOKAL värde på LC_CTYPE för databasen\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=ÄGARE databasanvändare som äger nya databasen\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=MALL databasmall att kopiera\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT databasserverns port\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ANVÄNDARE användarnamn att ansluta som\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password fråga ej efter lösenord\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password framtvinga fråga om lösenord\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAMN annat val av underhållsdatabas\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Som standard skapas en databas med samma namn som den nuvarande användares namn.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "ogiltigt värde till --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Mata in namn på den roll som skall läggas till: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Mata in lösenord för den nya rollen: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Mata in det igen: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Lösenorden stämde inte överens.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Skall den nya rollen vara en superuser?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Skall den nya rollen tillåtas skapa databaser?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Skall den nya rollen tillåtas skapa fler nya roller?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "misslyckades med lösenordskryptering: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "misslyckades med att skapa ny roll: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s skapar en ny PostgreSQL-roll.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [FLAGGA]... [ROLLNAMN]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N anslutningsgräns för roll (standard: ingen gräns)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb rollen kan skapa nya databaser\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb rollen kan inte skapa databaser (standard)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLL nya rollen kommer bli medlem i denna roll\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit rollen ärver rättigheter från roller den\n"
+" är medlem i (standard)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit rollen ärver inga rättigheter\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login rollen kan logga in (standard)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login rollen kan inte logga in\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt tilldela den nya rollen ett lösenord\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole rollen kan skapa nya roller\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole rollen kan inte skapa roller (standard)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser rollen blir en superuser\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser rollen blir inte superuser (standard)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive fråga efter rollnamn och egenskaper, snarare än\n"
+" att falla tillbaka på förval\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication rollen kan starta replikering\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication rollen får inte starta replikering\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=ANVÄNDARE användarnamn att ansluta som (ej den som skapas)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "saknar nödvändigt databasnamn"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Databasen \"%s\" kommer att tas bort permanent.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Är du säker?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "borttagning av databas misslyckades: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s tar bort en PostgreSQL-databas.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [FLAGGA]... DBNAMN\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force försöka stänga andra uppkopplingar innan radering\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive fråga innan något tas bort\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists felrapportera ej om databasen saknas\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Mata inn namnet på den roll som skall tas bort: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "saknar ett nödvändigt rollnamn"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Rollen \"%s\" kommer att tas bort permanent.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "borttagning av rollen \"%s\" misslyckades: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr "%s tar bort en PostgreSQL-roll.\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive fråga innan något tas bort och fråga efter\n"
+" rollnamn om sådant saknas\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists felrapportera ej om användaren saknas\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=ANVÄNDARE användare som ansluter (inte den som tas bort)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "kunde inte hämta förvalda värde."
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "accepterar anslutningar\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "vägrar anslutningar\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "inget svar\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "inget försök\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "okänt\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s utför en anslutningskontroll mot en PostgreSQL-databas.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [FLAGGA]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAMN databasens namn\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet tyst körning\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=VÄRDNAMN databasens värdnamn eller socketkatalog\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT databasserverns port\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SEK sekunder att vänta på anslutning; 0 stänger av (förval: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ANVÄNDARE användarnamn att ansluta som\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "antalet parallella jobb måste vara minst 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "kan inte omindexera alla databaser och samtidigt en specifik databas"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "kan inte omindexera alla databaser samtidigt med systemkatalogerna"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "kan inte omindexera angivna scheman i alla databaser"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "Kan inte indexera specifik tabell i alla databaser"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "Kan inte omindexera angivet index i alla databaser"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "kan inte omindexera angivna scheman och systemkataloger på samma gång"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "kan inte omindexera specifik tabell och systemkatalogerna samtidigt"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "kan inte omindexera angivna index och systemkatalogerna samtidigt."
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "kan inte använda multipla jobb för att omindexera systemkataloger"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "kan inte använda multipla jobb för att omindexera index"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "flaggan \"%s\" kan inte användas på serverversioner äldre än PostgreSQL %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "kan inte omindexera systemkataloger parallellt, hoppar över alla"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "omindexering av databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av index \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av schemat \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "omindexering av systemkataloger i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av tabell \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: omindexering av databasen \"%s\"\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s indexerar om en PostgreSQL-databas.\n"
+"\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all indexera om alla databaser\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently indexera om utan att låsa\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME databas att indexera om\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX återskapa enbart angivna index\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NUM använd så här många samtida anslutningar\n"
+" för omindexering\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet skriv inte ut några meddelanden\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system indexera enbart om systemkataloger\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA indexera enbart om angivna scheman\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABELL indexera enbart om angivna tabeller\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABELLRYMD tabellutrymme där index byggs om\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose skriv massor med utdata\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Läs beskrivningen av SQL-kommandot REINDEX för detaljer.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "parallella arbetare för städning måste vara större än eller lika med noll"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "minimal transaktions-ID-ålder måste vara minst 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "minimal multixact-ID-ålder måste vara minst 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "flaggan \"%s\" kan inte användas vid enbart analys"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "flaggan \"%s\" kan inte användas vid \"full vacuum\""
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "flaggan \"%s\" kan inte användas tillsammans med flaggan \"%s\""
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "kan inte städa alla databaser och endast en angiven på samma gång"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "kan inte städa en specifik tabell i alla databaser."
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Skapar minimal optimeringsstatistik (1 mål)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Skapar medium optimeringsstatistik (10 mål)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Skapar förvald (full) optimeringsstatistik"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: processar databasen \"%s\": %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: städar databasen \"%s\".\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "städning av tabell \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "städning av databasen \"%s\" misslyckades: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s städar och analyserar en PostgreSQL-databas.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all städa i alla databaser\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAMN databas att städa i\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping stäng av alla sidöverhoppande beteeenden\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo visa kommandon som skickas till servern\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full utför full städning\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze frys information om radtransaktioner\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup ta alltid bort indexposter som pekar på döda tupler\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM använd så här många samtida anslutningar för städning\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_ÅLDER minimal multixact-ID-ålder i tabeller som skall städas\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=XID_ÅLDER minimal transaktions-ID-ålder i tabeller som skall städas\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup ta inte bort indexposter som pekar på döda tupler\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast hoppa över TOAST-tabellen som hör ihop med tabellen som städas\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate trunkera inte tomma sidor i slutet av tabellen\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=PARALLELLA_ARBETARE\n"
+" använda så här många bakgrundsarbetare för städning, om det finns\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet skriv inte ut några meddelanden\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked hoppa äver relationer som inte kan låsas direkt\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABELL[(KOLUMNER)]' städa enbart i dessa tabeller\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose skriv massor med utdata\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze uppdatera optimeringsstatistik\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only uppdatera bara optimeringsstatistik; ingen städning\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages uppdatera bara optimeringsstatistik, men i\n"
+" flera steg för snabbare resultat; ingen städning\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Läs beskrivningen av SQL-kommandot VACUUM för detaljer.\n"
diff --git a/src/bin/scripts/po/tr.po b/src/bin/scripts/po/tr.po
new file mode 100644
index 0000000..0565244
--- /dev/null
+++ b/src/bin/scripts/po/tr.po
@@ -0,0 +1,1223 @@
+# translation of pgscripts-tr.po to Turkish
+# Devrim GUNDUZ <devrim@CommandPrompt.com>, 2004, 2005, 2006, 2007.
+# Nicolai Tufar <ntufar@gmail.org>, 2005, 2006, 2007.
+# İbrahim Edib Kökdemir <>, 2018.
+# Abdullah G. GÜLNER <>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts-tr\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-04-26 13:47+0000\n"
+"PO-Revision-Date: 2021-09-16 09:36+0200\n"
+"Last-Translator: Abdullah G. GüLNER\n"
+"Language-Team: Turkish <ceviri@postgresql.org.tr>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Basepath: /home/ntufar/pg/pgsql/src/bin/scripts\n"
+"X-Poedit-SearchPath-0: /home/ntufar/pg/pgsql/src/bin/scripts\n"
+
+#: ../../../src/fe_utils/logging.c:182
+#, c-format
+msgid "fatal: "
+msgstr "ölümcül (fatal): "
+
+#: ../../../src/fe_utils/logging.c:189
+#, c-format
+msgid "error: "
+msgstr "hata: "
+
+#: ../../../src/fe_utils/logging.c:196
+#, c-format
+msgid "warning: "
+msgstr "uyarı: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98
+#, c-format
+msgid "out of memory\n"
+msgstr "bellek yetersiz\n"
+
+#: ../../common/fe_memutils.c:92
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "null pointer duplicate edilemiyor (iç hata)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "geçerli kullanıcı ID si bulunamadı %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "kullanıcı mevcut değil"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "kullanıcı adı arama başarısız: hata kodu %lu"
+
+#: ../../fe_utils/print.c:353
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu satır)"
+msgstr[1] "(%lu satır)"
+
+#: ../../fe_utils/print.c:3058
+#, c-format
+msgid "Interrupted\n"
+msgstr "kesildi\n"
+
+#: ../../fe_utils/print.c:3122
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "B aşlık tablo içeriğine eklenemedi: %d kolon sayısı aşıldı.\n"
+
+#: ../../fe_utils/print.c:3162
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Hücre tablo içeriğine eklenemedi: %d olan toplan hücre sayısı açıldı.\n"
+
+#: ../../fe_utils/print.c:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "geçersiz çıktı biçimi (iç hata): %d"
+
+#: clusterdb.c:113 clusterdb.c:132 createdb.c:121 createdb.c:140
+#: createuser.c:168 createuser.c:183 dropdb.c:96 dropdb.c:105 dropdb.c:113
+#: dropuser.c:92 dropuser.c:107 dropuser.c:122 pg_isready.c:95 pg_isready.c:109
+#: reindexdb.c:139 reindexdb.c:158 vacuumdb.c:246 vacuumdb.c:265
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Daha fazla bilgi için \"%s --help\" komutunu deneyiniz.\n"
+
+#: clusterdb.c:130 createdb.c:138 createuser.c:181 dropdb.c:111 dropuser.c:105
+#: pg_isready.c:107 reindexdb.c:156 vacuumdb.c:263
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "çok sayıda komut satırı argümanı (ilki \"%s\")"
+
+#: clusterdb.c:142
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "aynı anda tüm veritabanları ve de belirli bir tanesi cluster edilemez"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "tüm veritabanlarındaki belirli tablo(lar) cluster edilemez"
+
+#: clusterdb.c:216
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%2$s\" veritabanındaki \"%1$s\"tablosunun cluster işlemi başarısız oldu: %3$s"
+
+#: clusterdb.c:219
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "\"%s\" veritabanının cluster işlemi başarısız oldu: %s"
+
+#: clusterdb.c:252
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: \"%s\" veritabanı cluster ediliyor\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s komutu bir veritabanında daha önceden cluster edilmiş tüm tabloları cluster eder.\n"
+"\n"
+
+#: clusterdb.c:274 createdb.c:250 createuser.c:344 dropdb.c:157 dropuser.c:163
+#: pg_isready.c:224 reindexdb.c:425 vacuumdb.c:1213
+#, c-format
+msgid "Usage:\n"
+msgstr "Kullanımı:\n"
+
+#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1214
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [SEÇENEK]... [VERİTABANI_ADI]\n"
+
+#: clusterdb.c:276 createdb.c:252 createuser.c:346 dropdb.c:159 dropuser.c:165
+#: pg_isready.c:227 reindexdb.c:427 vacuumdb.c:1215
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Seçenekler:\n"
+
+#: clusterdb.c:277
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all tüm veritabanlarını cluster eder\n"
+
+#: clusterdb.c:278
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=VERİTABANI_ADI cluster edilecek veritabanı adı\n"
+
+#: clusterdb.c:279 createuser.c:350 dropdb.c:160 dropuser.c:166 reindexdb.c:431
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo sunucuya gönderilen komutları göster\n"
+
+#: clusterdb.c:280 reindexdb.c:433
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet hiçbir ileti yazma\n"
+
+#: clusterdb.c:281
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLO_ADI sadece belirli (bir) tabloyu/tabloları cluster eder\n"
+
+#: clusterdb.c:282 reindexdb.c:437
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose bolca çıktı yaz\n"
+
+#: clusterdb.c:283 createuser.c:362 dropdb.c:162 dropuser.c:169 reindexdb.c:438
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version sürüm bilgisini gösterir ve sonra çıkar\n"
+
+#: clusterdb.c:284 createuser.c:367 dropdb.c:164 dropuser.c:171 reindexdb.c:439
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help bu yardımı göster, sonra çık\n"
+
+#: clusterdb.c:285 createdb.c:263 createuser.c:368 dropdb.c:165 dropuser.c:172
+#: pg_isready.c:233 reindexdb.c:440 vacuumdb.c:1235
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"Bağlantı seçenekleri:\n"
+
+#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173 reindexdb.c:441
+#: vacuumdb.c:1236
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME veritabanı sunucusu adresi ya da soket dizini\n"
+
+#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174 reindexdb.c:442
+#: vacuumdb.c:1237
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT veritabanı sunucusunun portu\n"
+
+#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=KULLANICI_ADI bağlanılacak kullanıcı adı\n"
+
+#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176 reindexdb.c:444
+#: vacuumdb.c:1239
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password parola sorma\n"
+
+#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177 reindexdb.c:445
+#: vacuumdb.c:1240
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password parola sorulmasını sağla\n"
+
+#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1241
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=VTADI alternatif bakım veritabanı\n"
+
+#: clusterdb.c:292
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Ayrıntılar için bir SQL komutu olan CLUSTER'in açıklamasını okuyabilirsiniz.\n"
+
+#: clusterdb.c:293 createdb.c:271 createuser.c:374 dropdb.c:172 dropuser.c:178
+#: pg_isready.c:238 reindexdb.c:448 vacuumdb.c:1243
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+msgstr ""
+"\n"
+"Hataları <pgsql-bugs@lists.postgresql.org> adresine bildirebilirsiniz.\n"
+
+#: common.c:84 common.c:130
+msgid "Password: "
+msgstr "Parola: "
+
+#: common.c:117
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "%s veritabanına bağlanılamadı: bellek yetersiz"
+
+#: common.c:144
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "%s veritabanına bağlanılamadı: %s"
+
+#: common.c:197 common.c:223
+#, c-format
+msgid "query failed: %s"
+msgstr "sorgu başarısız oldu: %s"
+
+#: common.c:198 common.c:224
+#, c-format
+msgid "query was: %s"
+msgstr "sorgu şu idi: %s"
+
+#: common.c:347
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "sorgu 1 yerine %d satır döndürdü: %s"
+msgstr[1] "sorgu 1 yerine %d satır döndürdü: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:372
+msgid "y"
+msgstr "e"
+
+#. translator: abbreviation for "no"
+#: common.c:374
+msgid "n"
+msgstr "h"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:384
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:398
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Lütfen yanıtlayınız: \"%s\" veya \"%s\".\n"
+
+#: common.c:477 common.c:514
+#, c-format
+msgid "Cancel request sent\n"
+msgstr "İptal isteği gönderildi\n"
+
+#: common.c:480 common.c:518
+#, c-format
+msgid "Could not send cancel request: %s"
+msgstr "İptal isteği gönderilemedi: %s"
+
+#: createdb.c:148
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "--locale ve --lc-ctype seçeneklerinden sadece birisi belirtilebilir"
+
+#: createdb.c:153
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "--locale ve --lc-collate seçeneklerinden sadece birisi belirtilebilir"
+
+#: createdb.c:164
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" geçerli bir dil kodlaması adı değildir"
+
+#: createdb.c:212
+#, c-format
+msgid "database creation failed: %s"
+msgstr "veritabanı yaratma başarısız oldu: %s"
+
+#: createdb.c:231
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "yorum yaratma işlemi başarısız oldu (veritabanı yaratıldı): %s"
+
+#: createdb.c:249
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s bir PostgreSQL veritabanı yaratır.\n"
+"\n"
+
+#: createdb.c:251
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [SEÇENEK]... [VERİTABANI_ADI] [TANIM]\n"
+
+#: createdb.c:253
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE veritabanı için öntanımlı tablo uzayı\n"
+
+#: createdb.c:254
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo sunucuya gönderilen komutları göster\n"
+
+#: createdb.c:255
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING veritabanı için dil kodlaması\n"
+
+#: createdb.c:256
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE veritabanı için yerel ayarları\n"
+
+#: createdb.c:257
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE Veritabanı için LC_COLLATE ayarı\n"
+
+#: createdb.c:258
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE Veritabanı için LC_CTYPE ayarı\n"
+
+#: createdb.c:259
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER yeni veritabanının sahibi olacak veritabanı kullanıcısı\n"
+
+#: createdb.c:260
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE kopyalanacak şablon veritabanı\n"
+
+#: createdb.c:261
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version sürüm bilgisini göster, sonra çık\n"
+
+#: createdb.c:262
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help bu yardımı göster, sonra çık\n"
+
+#: createdb.c:264
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME veritabanı sunucusu adresi ya da soket dizini\n"
+
+#: createdb.c:265
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT veritabanı sunucu portu\n"
+
+#: createdb.c:266
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=KULLANICI_ADI bağlanılacak kullanıcı adı\n"
+
+#: createdb.c:267
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password asla parola sorma\n"
+
+#: createdb.c:268
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password parola sormasını sağla\n"
+
+#: createdb.c:269
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=VTADI alternatif bakım veritabanı\n"
+
+#: createdb.c:270
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"Öntanımlı olarak , mevcut kullanıcı ile aynı adda veritabanı yaratılır.\n"
+
+#: createuser.c:191
+msgid "Enter name of role to add: "
+msgstr "Eklenecek rol adını girin: "
+
+#: createuser.c:208
+msgid "Enter password for new role: "
+msgstr "Yeni rol için parola girin: "
+
+#: createuser.c:210
+msgid "Enter it again: "
+msgstr "Yeniden girin: "
+
+#: createuser.c:213
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Parolalar uyuşmadı.\n"
+
+#: createuser.c:221
+msgid "Shall the new role be a superuser?"
+msgstr "Yeni rol superuser olsun mu?"
+
+#: createuser.c:236
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Yeni rol, veritabanı oluşturabilsin mi?"
+
+#: createuser.c:244
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Yeni rol, başka yeni roller oluşturabilsin mi?"
+
+#: createuser.c:274
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "parola şifreleme hatası: %s"
+
+#: createuser.c:329
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "yeni rol oluşturma işlemi başarısız oldu: %s"
+
+#: createuser.c:343
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s yeni bir PostgreSQL rol oluşturur.\n"
+"\n"
+
+#: createuser.c:345 dropuser.c:164
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [SEÇENEKLER]... [ROL_ADI]\n"
+
+#: createuser.c:347
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N rol için azami bağlantı sayısı (varsayılan: sınırsız)\n"
+
+#: createuser.c:348
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb rol yeni veritabanı oluşturabiliyor\n"
+
+#: createuser.c:349
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb rol veritabanı oluşturamaz (varsayılan)\n"
+
+#: createuser.c:351
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROL yeni rol bu rolün üyesi olacaktır\n"
+
+#: createuser.c:352
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit rol, üye olduğu rollerin yetkilerini \n"
+" miras alır (varsayılan)\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit rol, hiçbir yetkiyi miras almaz\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login rol giriş yapabiliyor\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login role giriş yapamaz\n"
+
+#: createuser.c:357
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt yeni role bir şifre atar\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole rol yeni rol oluşturabiliyor\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole rol başka bir rol oluşturamaz (varsayılan)\n"
+
+#: createuser.c:360
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser rol, superuser olacaktır\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser rol, superuser olmayacaktır (varsayılan)\n"
+
+#: createuser.c:363
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive varsayılanları kullanmaktansa eksik rol ve niteliklerin\n"
+" girilmesini sağla\n"
+
+#: createuser.c:365
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication rol replikasyon başlatabilir\n"
+
+#: createuser.c:366
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication rol replikasyon başlatamaz\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=KULLANICI_ADI bağlanılacak kullanıcı adı (yaratılacak değil)\n"
+
+#: dropdb.c:104
+#, c-format
+msgid "missing required argument database name"
+msgstr "gerekli argüman eksik: veritabanı adı"
+
+#: dropdb.c:119
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "\"%s\" veritabanı kalıcı olarak silinecektir.\n"
+
+#: dropdb.c:120 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Emin misiniz?"
+
+#: dropdb.c:142
+#, c-format
+msgid "database removal failed: %s"
+msgstr "veritabanı silme işlemi başarısız oldu: %s"
+
+#: dropdb.c:156
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s PostgreSQL veritabanını siler.\n"
+"\n"
+
+#: dropdb.c:158
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [SEÇENEK]... VERİTABANI_ADI\n"
+
+#: dropdb.c:161
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive herhangi birşeyi silmeden önce uyarı verir\n"
+
+#: dropdb.c:163
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists don't report error if database doesn't exist\n"
+
+#: dropuser.c:115
+msgid "Enter name of role to drop: "
+msgstr "Silinecek rolün adını giriniz: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "gerekli bir argüman olan rol adı eksik"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "\"%s\" rolü kalıcı olarak silinecektir.\n"
+
+#: dropuser.c:147
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "\"%s\" rolünün silinmesi başarısız oldu: %s"
+
+#: dropuser.c:162
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s bir PostgreSQL rolünü siler.\n"
+"\n"
+
+#: dropuser.c:167
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive herhangi birşeyi silmeden önce uyarı ver, ve\n"
+" belirtilmemişse rol adının girilmesini iste\n"
+
+#: dropuser.c:170
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists kullanıcı mevcut değilse bildirimde bulunma\n"
+
+#: dropuser.c:175
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=KULLANICI _ADI bağlanırken kullanılacak kullanıcı adı (silinecek olan değil)\n"
+
+#: pg_isready.c:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "varsayılan seçenekler getirilemedi"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "bağlantılar kabul ediliyor\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "bağlantılar reddediliyor\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "cevap yok\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "deneme yok\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "bilinmeyen\n"
+
+#: pg_isready.c:223
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s bir PostgreSQL veritabanına bağlantı kontrolü sağlar.\n"
+"\n"
+
+#: pg_isready.c:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [SEÇENEK]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=VERİTABANI_ADI veritabanı adı\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet sessizce çalış\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version sürüm bilgisini gösterir ve sonra çıkar\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help bu yardımı gösterir ve sonra çıkar\n"
+
+#: pg_isready.c:234
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME veritabanı sunucusu adresi ya da soket dizini\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT veritabanı sunucusunun portu\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SANİYE bağlantı denenirken beklenecek saniye, 0 devre dışı bırakır (vrsayılan: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=KULLANICI_ADI bağlanılacak kullanıcı adı\n"
+
+#: reindexdb.c:168
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "aynı anda hem tüm veritabanları hem belirli bir veritabanı tekrar indekslenemez"
+
+#: reindexdb.c:173
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "aynı anda tüm veritabanları ve sistem katalogları reindex edilemez"
+
+#: reindexdb.c:178
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "tüm veritabanlarındaki belirli şema(lar) tekrar indekslenemez"
+
+#: reindexdb.c:183
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "tüm veritabanlarındaki belirli tablo(lar) tekrar indekslenemez"
+
+#: reindexdb.c:188
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "tüm veritabanlarındaki belirli ndeks(ler) tekrar indekslenemez"
+
+#: reindexdb.c:199
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "aynı anda belirli şema(lar) ve sistem katalogları tekrar indekslenemez"
+
+#: reindexdb.c:204
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "aynı anda belirli tablo(lar) ve sistem katalogları tekrar indekslenemez"
+
+#: reindexdb.c:209
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "aynı anda belirli indeks(ler) ve sistem katalogları tekrar indekslenemez"
+
+#: reindexdb.c:298
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "PostgreSQL %2$s den eski sunucu sürümlerinde \"%1$s\" seçeneği kullanılamaz"
+
+#: reindexdb.c:326
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%2$s\" veritabanındaki \"%1$s\" tablosunun tekrar indeksleme işlemi başarısız: %3$s"
+
+#: reindexdb.c:329
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%2$s\" veritabanındaki \"%1$s\" indeksinin yeniden oluşturulması başarısız: %3$s"
+
+#: reindexdb.c:332
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%2$s\" veritabanındaki \"%1$s\" şemasının tekrar indeksleme işlemi başarısız: %3$s"
+
+#: reindexdb.c:335
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "\"%s\" veritabanının yeniden indekslenmesi başarısız oldu: %s"
+
+#: reindexdb.c:369
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: \"%s\" veritabanı yeniden indeksleniyor\n"
+
+#: reindexdb.c:412
+#, c-format
+msgid "reindexing of system catalogs failed: %s"
+msgstr "sistem kataloglarının yeniden indekslemesi başarısız: %s"
+
+#: reindexdb.c:424
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s PostgreSQL veritabanını yeniden indeksler.\n"
+"\n"
+
+#: reindexdb.c:428
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all tüm veritabanlarını yeniden indeksle\n"
+
+#: reindexdb.c:429
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently eşzamanlı olarak yeniden indeksle\n"
+
+#: reindexdb.c:430
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=VERİTABANI_ADI yeniden indekslenecek veritabanı adı\n"
+
+#: reindexdb.c:432
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX sadece belirli indeks(ler)i yeniden oluştur\n"
+
+#: reindexdb.c:434
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system sistem kataloglarını yeniden indeksle\n"
+
+#: reindexdb.c:435
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=ŞEMA sadece belirtilen şema veya şemaları tekrar indeksle\n"
+
+#: reindexdb.c:436
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLO_ADI sadece belirli bir tablonun veya tabloların indekslerini yeniden oluştur\n"
+
+#: reindexdb.c:447
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Ayrıntılar için bir REINDEX SQL komutunun açıklamasını okuyabilirsiniz.\n"
+
+#: vacuumdb.c:207
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "paralel iş sayısı en azından 1 olmalı"
+
+#: vacuumdb.c:212
+#, c-format
+msgid "too many parallel jobs requested (maximum: %d)"
+msgstr "çok fazla paralel iş talep edildi (azami: %d)"
+
+#: vacuumdb.c:233
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "asgari transaction ID yaşı en az 1 olmalı"
+
+#: vacuumdb.c:241
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "asgari multixact ID yaşı en az 1 olmalı"
+
+#: vacuumdb.c:273 vacuumdb.c:279 vacuumdb.c:285
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "sadece analyze gerçekleştirilirken \"%s\" seçeneği kullanılamaz"
+
+#: vacuumdb.c:302
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "aynı anda tüm veritabanları ve de belirli bir tanesi vakumlanamaz"
+
+#: vacuumdb.c:307
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "tüm veritabanlarındaki belirli (bir) tablo(lar) vakumlanamaz"
+
+#: vacuumdb.c:398
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Minimal optimizer istatistikleri oluşturuluyor (1 hedef)"
+
+#: vacuumdb.c:399
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Orta ölçekte optimizer istatistikleri oluşturuluyor (10 hedef)"
+
+#: vacuumdb.c:400
+msgid "Generating default (full) optimizer statistics"
+msgstr "Varsayılan (tam) optimizer istatistikleri oluşturuluyor"
+
+#: vacuumdb.c:412 vacuumdb.c:427 vacuumdb.c:434
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL 9.6"
+msgstr "PostgreSQL 9,6'dan eski sunucu sürümlerinde \"%s\" seçeneği kullanılamaz"
+
+#: vacuumdb.c:420
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL 12"
+msgstr "PostgreSQL 12'den eski sunucu sürümlerinde \"%s\" seçeneği kullanılamaz"
+
+#: vacuumdb.c:442
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: \"%s\" veritabanı üzerinde işlem yapılıyor: %s\n"
+
+#: vacuumdb.c:445
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: \"%s\" veritabanı vakumlanıyor\n"
+
+#: vacuumdb.c:939
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "\"%2$s\" veritabanındaki \"%1$s\" tablosunun vakumlama işlemi başarısız oldu: %3$s"
+
+#: vacuumdb.c:942 vacuumdb.c:1077
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "\"%s\" veritabanının vakumlanması başarısız oldu: %s"
+
+#: vacuumdb.c:1212
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s bir PostgreSQL veritabanını temizler ve analiz eder.\n"
+"\n"
+
+#: vacuumdb.c:1216
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all tüm veritabanlarını vakumlar\n"
+
+#: vacuumdb.c:1217
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=VERİTABANI_ADI vakumlanacak veritabanı\n"
+
+#: vacuumdb.c:1218
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping bütün sayfa atlama davranışını devre dışı bırak\n"
+
+#: vacuumdb.c:1219
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo sunucuya gönderilen komutları yaz\n"
+
+#: vacuumdb.c:1220
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full tam (FULL) vakumlama yap\n"
+
+#: vacuumdb.c:1221
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze Dondurulan satır transaction bilgisi\n"
+
+#: vacuumdb.c:1222
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=SAYI vakum için bu sayı kadar eşzamanlı bağlantı kullan\n"
+
+#: vacuumdb.c:1223
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE vakumlanacak tabloların asgari multixact ID yaşı\n"
+
+#: vacuumdb.c:1224
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=XID_AGE vakumlanacak tabloların asgari transaction ID yaşı\n"
+
+#: vacuumdb.c:1225
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet hiçbir mesaj yazma\n"
+
+#: vacuumdb.c:1226
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked hemen kilitlenemeyecek tabloları atla\n"
+
+#: vacuumdb.c:1227
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLO[(KOLONLAR)]' sadece belirli bir tabloyu / tabloları vakumlar\n"
+
+#: vacuumdb.c:1228
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose bolca çıktı yaz\n"
+
+#: vacuumdb.c:1229
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version sürüm bilgisini göster, sonra çık\n"
+
+#: vacuumdb.c:1230
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze optimizer istatistiklerini güncelle\n"
+
+#: vacuumdb.c:1231
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -z, --analyze-only sadece optimizer bilgilerini güncelle; vakum işlemi yok\n"
+
+#: vacuumdb.c:1232
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages sadece optimizer istatistiklerini güncelle, daha hızlı\n"
+" sonuç için birden fazla aşamada; vakum işlemi yok\n"
+
+#: vacuumdb.c:1234
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help bu yardımı göster, sonrasında çık\n"
+
+#: vacuumdb.c:1242
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Ayrıntılar için, bir SQL komutu olan VACUUM'un tanımlarını okuyun.\n"
+
+#~ msgid "%s: invalid socket: %s"
+#~ msgstr "%s: geçersiz soket: %s"
+
+#~ msgid "Could not send cancel request: %s\n"
+#~ msgstr "İptal isteği gönderilemedi: %s\n"
+
+#~ msgid " -q, --quiet don't write any messages\n"
+#~ msgstr " -q, --quiet Hiç bir mesaj yazma\n"
+
+#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n"
+#~ msgstr "pg_strdup: null pointer duplicate edilemiyor (iç hata)\n"
+
+#~ msgid "%s: out of memory\n"
+#~ msgstr "%s: yetersiz bellek\n"
+
+#~ msgid "%s: could not get current user name: %s\n"
+#~ msgstr "%s: geçerli kullanıcı adı alınamadı: %s\n"
+
+#~ msgid "%s: could not obtain information about current user: %s\n"
+#~ msgstr "%s: geçerli kullanıcı hakkında bilgi alınamadı: %s\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version sürüm bilgisini göster ve çık\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help bu yardımı göster ve çık\n"
+
+#~ msgid "%s: cannot use the \"freeze\" option when performing only analyze\n"
+#~ msgstr "%s: sadece analyze işlemi yapıldığında \"freeze\" seçeneğini kullanamaz\n"
+
+#~ msgid " -d, --dbname=DBNAME database from which to remove the language\n"
+#~ msgstr " -d, --dbname=VERİTABANI_ADI dilin sileneceği veritabanının adı\n"
+
+#~ msgid ""
+#~ "%s removes a procedural language from a database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s veritabanından yordamsal bir dili siler.\n"
+#~ "\n"
+
+#~ msgid "%s: language removal failed: %s"
+#~ msgstr "%s: dil silme işlemi başarısız oldu: %s"
+
+#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n"
+#~ msgstr "%s: %s fonksiyon, \"%s\" dilinde tanımlanmış durumda; dil kaldırılamadı\n"
+
+#~ msgid "%s: language \"%s\" is not installed in database \"%s\"\n"
+#~ msgstr "%s: \"%s\" dili \"%s\" veritabanında kurulu değil \n"
+
+#~ msgid ""
+#~ "\n"
+#~ "If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will\n"
+#~ "be prompted interactively.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Eğer -d, -D, -r, -R, -s, -S ve ROLENAME'den birisi belirtilmezse, bunlar size\n"
+#~ "etkileşimli olarak sorulacaktır.\n"
+
+#~ msgid " -N, --unencrypted do not encrypt stored password\n"
+#~ msgstr " -N, --unencrypted saklanmış şifreyi kriptolamaz\n"
+
+#~ msgid " -E, --encrypted encrypt stored password\n"
+#~ msgstr " -E, --encrypted saklanan şifreleri encrypt eder\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version sürüm bilgisini göster ve çık\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help bu yardımı göster ve çık\n"
+
+#~ msgid " -l, --list show a list of currently installed languages\n"
+#~ msgstr " -l, --list Şu anda kurulu olan dilleri göster\n"
+
+#~ msgid " -d, --dbname=DBNAME database to install language in\n"
+#~ msgstr " -d, --dbname=VERİTABANI_ADI dilin kurulacağı veritabanının adı\n"
+
+#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n"
+#~ msgstr " %s [SEÇENEK]... DİL_ADI [VERİTABANI_ADI]\n"
+
+#~ msgid ""
+#~ "%s installs a procedural language into a PostgreSQL database.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "%s Bir PostgreSQL veritabanına yordamsal bir dil kurar.\n"
+#~ "\n"
+
+#~ msgid "%s: language installation failed: %s"
+#~ msgstr "%s: Dil kurulumu başarısız oldu: %s"
+
+#~ msgid "%s: language \"%s\" is already installed in database \"%s\"\n"
+#~ msgstr "%s: \"%s\" dili daha önceden veritabanına yüklenmiştir \"%s\"\n"
+
+#~ msgid "Procedural Languages"
+#~ msgstr "Yordamsal Diller"
+
+#~ msgid "Trusted?"
+#~ msgstr "Güvenilir mi?"
+
+#~ msgid "no"
+#~ msgstr "hayır"
+
+#~ msgid "yes"
+#~ msgstr "evet"
+
+#~ msgid "Name"
+#~ msgstr "Adı"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version sürüm bilgisini göster ve çık\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help bu yardımı göster ve çık\n"
+
+#~ msgid "%s: %s"
+#~ msgstr "%s: %s"
+
+#~ msgid "%s: \"%s\" is not a valid encoding name\n"
+#~ msgstr "%s: \"%s\" geçerli bir dil kodlaması değil\n"
+
+#~ msgid "%s: query returned %d row instead of one: %s\n"
+#~ msgid_plural "%s: query returned %d rows instead of one: %s\n"
+#~ msgstr[0] "%s: sorgu bir yerine %d satır döndürdü: %s\n"
+#~ msgstr[1] "%s: sorgu bir yerine %d satır döndürdü: %s\n"
+
+#~ msgid "%s: query was: %s\n"
+#~ msgstr "%s: sorgu şu idi: %s\n"
+
+#~ msgid "%s: query failed: %s"
+#~ msgstr "%s: sorgu başarısız oldu: %s"
diff --git a/src/bin/scripts/po/uk.po b/src/bin/scripts/po/uk.po
new file mode 100644
index 0000000..42422e6
--- /dev/null
+++ b/src/bin/scripts/po/uk.po
@@ -0,0 +1,1117 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: postgresql\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-03-16 09:18+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/pgscripts.pot\n"
+"X-Crowdin-File-ID: 784\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "збій: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "помилка: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "попередження: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "недостатньо пам'яті\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "неможливо дублювати нульовий покажчик (внутрішня помилка)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "не можу знайти користувача з ефективним ID %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "користувача не існує"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "невдала підстановка імені користувача: код помилки %lu"
+
+#: ../../fe_utils/cancel.c:189 ../../fe_utils/cancel.c:238
+msgid "Cancel request sent\n"
+msgstr "Запит на скасування відправлений\n"
+
+#: ../../fe_utils/cancel.c:190 ../../fe_utils/cancel.c:239
+msgid "Could not send cancel request: "
+msgstr "Не вдалося надіслати запит на скасування: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "Пароль: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "не можливо під'єднатися до бази даних %s: не вистачає пам'яті"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "занадто багато завдань для цієї платформи"
+
+#: ../../fe_utils/parallel_slot.c:522
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "обробка бази даних \"%s\" не вдалась: %s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu рядок)"
+msgstr[1] "(%lu рядки)"
+msgstr[2] "(%lu рядків)"
+msgstr[3] "(%lu рядка)"
+
+#: ../../fe_utils/print.c:3040
+#, c-format
+msgid "Interrupted\n"
+msgstr "Перервано\n"
+
+#: ../../fe_utils/print.c:3104
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Неможливо додати заголовок до вмісту таблиці: кількість колонок %d перевищено.\n"
+
+#: ../../fe_utils/print.c:3144
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Неможливо додати комірку до вмісту таблиці: перевищено загальну кількість комірок %d.\n"
+
+#: ../../fe_utils/print.c:3402
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "невірний формат виводу (внутрішня помилка): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "запит не вдався: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "запит був: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "забагато аргументів у командному рядку (перший \"%s\")"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "неможливо кластеризувати всі бази даних і одну вказану одночасно"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "неможливо кластеризувати вказані таблиці у всіх базах даних"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "кластеризувати таблицю \"%s\" у базі даних \"%s\" не вдалося: %s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "кластеризувати базу даних \"%s\" не вдалося: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: кластеризація бази даних \"%s\"\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid "%s clusters all previously clustered tables in a database.\n\n"
+msgstr "%s кластеризація усіх попередньо кластеризованих таблиць в базі даних.\n\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "Використання:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPTION]... [DBNAME]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid "\n"
+"Options:\n"
+msgstr "\n"
+"Параметри:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all кластеризація усіх баз даних\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=ІМ'Я_БД база даних для кластеризації\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo показати команди, надіслані серверу\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не виводити жодних повідомлень\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=ТАБЛИЦЯ кластеризувати тільки вказані таблиці\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose виводити багато інформації\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version вивести інформацію про версію і вийти\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показати цю довідку, потім вийти\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid "\n"
+"Connection options:\n"
+msgstr "\n"
+"Налаштування з'єднання:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME хост сервера бази даних або каталог сокетів\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT порт сервера бази даних\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password ніколи не запитувати пароль\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password запросити пароль\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME альтернативна бази даних для обслуговування\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid "\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr "\n"
+"Для деталей читайте опис команди SQL CLUSTER.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid "\n"
+"Report bugs to <%s>.\n"
+msgstr "\n"
+"Повідомляти про помилки на <%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Домашня сторінка %s: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "запит повернув %d рядок замість одного: %s"
+msgstr[1] "запит повернув %d рядки замість одного: %s"
+msgstr[2] "запит повернув %d рядків замість одного: %s"
+msgstr[3] "запит повернув %d рядків замість одного: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Відповідь має бути \"%s\" або \"%s\".\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "тільки --locale або --lc-ctype може бути вказаний"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "можна вказати лише одне: або --locale, або --lc-collate"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" не є невірним ім'ям кодування"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "створити базу даних не вдалося: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "не вдалося створити коментарі (база даних була створена): %s"
+
+#: createdb.c:266
+#, c-format
+msgid "%s creates a PostgreSQL database.\n\n"
+msgstr "%s створює базу даних PostgreSQL.\n\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=ТАБЛИЧНИЙ_ПРОСТІР табличний простір для бази даних за замовчуванням\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo показати команди, надіслані серверу\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=КОДУВАННЯ кодування бази даних\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=ЛОКАЛЬ параметри локалі бази даних\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для бази даних\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для бази даних\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --власник=ВЛАСНИК користувач-власник нової бази даних\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --шаблон=ШАБЛОН шаблонна база даних для копіювання\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version вивести інформацію про версію, потім вийти\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показати цю довідку, потім вийти\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=ІМ'Я_ХОСТА хост сервера бази даних або каталог сокетів\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера бази даних\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password ніколи не запитувати пароль\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password запросити пароль\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME альтернативна бази даних для обслуговування\n"
+
+#: createdb.c:287
+#, c-format
+msgid "\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr "\n"
+"За замовчуванням ім'ям бази даних вважається ім'я поточного користувача.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "неприпустиме значення для --connection-limit: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Введіть ім'я нової ролі: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "Введіть пароль для нової ролі: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "Введіть знову: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Паролі не співпадають.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "Чи буде нова роль суперкористувачем?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Чи дозволено новій ролі створювати бази даних?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Чи дозволено новій ролі створювати інші нові ролі?"
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "помилка шифрування пароля: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "не вдалося створити нову роль: %s"
+
+#: createuser.c:350
+#, c-format
+msgid "%s creates a new PostgreSQL role.\n\n"
+msgstr "%s створює нову роль PostgreSQL.\n\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPTION]... [ROLENAME]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N ліміт під'єднань для ролі (за замовчуванням ліміту немає)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb роль може створювати нові бази даних\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb роль не може створювати нові бази даних (за замовчуванням)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=РОЛЬ нова роль буде включена в цю роль\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr " -i, --inherit роль переймає права від ролей до яких вона\n"
+" включена (за замовчуванням)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit роль не переймає права\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login роль може увійти (за замовчуванням)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login роль не може увійти\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt призначення паролю для нової ролі\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole роль може створювати нові ролі\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole роль не може створювати нові бази даних (за замовчуванням)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser роль буде суперкористувачем\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser роль не буде суперкористувачем (за замовчуванням)\n"
+
+#: createuser.c:370
+#, c-format
+msgid " --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr " --interactive запитати пропущені ім’я ролі та атрибути, а не використовувати стандартні\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication роль може ініціювати реплікацію\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication роль не може ініціювати реплікацію\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=USERNAME ім'я користувача для підключення (не для створення)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "немає запитаного аргументу: імені бази даних"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "База даних \"%s\" буде назавжди видалена.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Ви впевнені?"
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "помилка при видаленні бази даних: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid "%s removes a PostgreSQL database.\n\n"
+msgstr "%s видаляє базу даних PostgreSQL.\n\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPTION]... ІМ'Я_БД\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force спробувати завершити інші підключення перед видаленням\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive запитувати перед видаленням чого-небудь\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists не повідомляти про помилку, якщо бази даних не існує\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "Введіть ім'я ролі для видалення: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "немає запитаного аргументу: імені ролі"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Роль \"%s\" буде назавжди видалена.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "помилка при видаленні ролі \"%s\": %s"
+
+#: dropuser.c:168
+#, c-format
+msgid "%s removes a PostgreSQL role.\n\n"
+msgstr "%s видаляє роль PostgreSQL.\n\n"
+
+#: dropuser.c:173
+#, c-format
+msgid " -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr " -i, --interactive запитувати перед видаленням чого-небудь і запитувати\n"
+" ім'я ролі, якщо не вказано\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists не повідомляти про помилку, якщо користувача не існує\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=USERNAME ім'я користувача для підключення (не для розривання)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "не вдалося отримати параметри за замовчуванням"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "отримання підключень\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "відторгнення підключень\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "відповіді немає\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "немає спроб\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "невідомо\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid "%s issues a connection check to a PostgreSQL database.\n\n"
+msgstr "%s: перевірка підключення до бази даних PostgreSQL.\n\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s: [OPTION]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=ІМ'Я_БД ім'я бази даних\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet тихий запуск\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version вивести інформацію про версію, потім вийти\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показати цю довідку, потім вийти\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME хост серверу баз даних або каталог сокетів\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера бази даних\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SECS секунд для очікування при спробі підключення, 0 без обмежень (за замовчуванням: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "число паралельних завдань повинно бути не менше 1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "неможливо переіндексувати всі бази даних і одну вказану одночасно"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "не можливо переіндексувати всі бази даних і системні каталоги одночасно"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "неможливо переіндексувати вказані схеми в усіх базах даних"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "неможливо переіндексувати вказані таблиці в усіх базах даних"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "неможливо переіндексувати вказані індекси в усіх базах даних"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "не можливо переіндексувати вказані схеми і системні каталоги одночасно"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "не можливо переіндексувати вказані таблиці і системні каталоги одночасно"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "не можливо переіндексувати вказані індекси і системні каталоги одночасно"
+
+#: reindexdb.c:259
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "не можна використовувати декілька завдань для переіндексування системних каталогів"
+
+#: reindexdb.c:288
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "не можна використовувати декілька завдань для переіндексування індексів"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "не можна використовувати параметр \"%s\" на серверній версії старішій за PostgreSQL %s"
+
+#: reindexdb.c:401
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "не можна конкурентно переіндексувати системні каталоги, пропускаємо"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "переіндексувати базу даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "переіндексувати індекси \"%s\" в базі даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "переіндексувати схему \"%s\" в базі даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:617
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "переіндексування системних каталогів в базі даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "переіндексувати таблиці \"%s\" в базі даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: переіндексування бази даних \"%s\"\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid "%s reindexes a PostgreSQL database.\n\n"
+msgstr "%s переіндексовує базу даних PostgreSQL.\n\n"
+
+#: reindexdb.c:795
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all переіндексувати всі бази даних\n"
+
+#: reindexdb.c:796
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently переіндексувати одночасно\n"
+
+#: reindexdb.c:797
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME база даних для переіндексування\n"
+
+#: reindexdb.c:799
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX повторно створити лише вказані індекси\n"
+
+#: reindexdb.c:800
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM використати цю кількість паралельних підключень для переіндексування\n"
+
+#: reindexdb.c:801
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не писати жодних повідомлень\n"
+
+#: reindexdb.c:802
+#, c-format
+msgid " -s, --system reindex system catalogs only\n"
+msgstr " -s, --system переіндексувати тільки системні каталоги\n"
+
+#: reindexdb.c:803
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA переіндексувати лише вказані схеми\n"
+
+#: reindexdb.c:804
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE переіндексувати лише вказані таблиці\n"
+
+#: reindexdb.c:805
+#, c-format
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABLESPACE табличний простір для перебудованих індексів\n"
+
+#: reindexdb.c:806
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose виводити багато повідомлень\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid "\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr "\n"
+"Для деталей читайте опис команди SQL REINDEX.\n"
+
+#: vacuumdb.c:206
+#, c-format
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "паралельні робітники для вакууму повинні бути більшими або дорівнювати нулю"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "мінімальний ID ери транзакції має бути хоча б 1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "мінімальна ера ID мультитранзакції повинна бути щонайменше 1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "не можна використовувати параметр \"%s\" під час виконання лише аналіза"
+
+#: vacuumdb.c:332
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "не можна використовувати параметр \"%s\" під час виконання VACUUM FULL"
+
+#: vacuumdb.c:341
+#, c-format
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "використовувати параметр \"%s\" з параметром \"%s\" не можна"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "неможливо очистити всі бази даних і одну вказану одночасно"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "неможливо очистити вказані таблиці в усіх базах даних"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Генерування мінімальної статистики для оптімизатора (1 мета)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Генерування середньої статистики для оптимізатора (10 цілей)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "Генерування статистики для оптимізатора за замовчуванням (повністю)"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: обробка бази даних \"%s\": %s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: очищення бази даних \"%s\"\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "очистити таблиці \"%s\" в базі даних \"%s\" не вдалося: %s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "очистити базу даних \"%s\" не вдалося: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid "%s cleans and analyzes a PostgreSQL database.\n\n"
+msgstr "%s очищує й аналізує базу даних PostgreSQL.\n\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all очистити усі бази даних\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=ІМ'Я_БД база даних для очищення\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping відключити пропуск сторінок\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo показати команди, надіслані серверу\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full зробити повне очищення\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze заморозити інформацію щодо транзакцій в рядках\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup завжди видаляти записи індексів, які вказують на мертві кортежі\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=ЧИСЛО використати ці паралельні підключення для очищення\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE мінімальний ID ери мультитранзакції таблиць для вакууму\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE мінімальний ID ери транзакції таблиць для вакууму\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup не видаляти записи індексів, які вказують на мертві кортежі\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast пропускати таблицю TOAST, пов'язану з таблицею для очищення\n"
+
+#: vacuumdb.c:1040
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate не скорочувати пусті сторінки наприкінці таблиці\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLEL_WORKERS використати таку кількість фонових робітників для очищення, якщо вони доступні\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не писати жодних повідомлень\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked пропустити відношення, що не можуть бути заблоковані негайно\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='ТАБЛИЦЯ[(СТОВПЦІ)]' очистити тільки вказані таблиці\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose виводити багато інформації\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version вивести інформацію про версію і вийти\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze оновити статистику для оптимізатора\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only оновити лише статистику для оптимізатора, не очищати\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid " --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr " --analyze-in-stages оновити лише статистику для оптимізатора, у декілька стадій для швидших результатів, не очищати\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показати цю справку, потім вийти\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid "\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr "\n"
+"Для деталей читайте опис команди SQL VACUUM.\n"
+
diff --git a/src/bin/scripts/po/zh_CN.po b/src/bin/scripts/po/zh_CN.po
new file mode 100644
index 0000000..12c7560
--- /dev/null
+++ b/src/bin/scripts/po/zh_CN.po
@@ -0,0 +1,1147 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-14 05:47+0000\n"
+"PO-Revision-Date: 2021-08-15 18:30+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"
+"X-Generator: Poedit 1.5.7\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:259
+#, c-format
+msgid "fatal: "
+msgstr "致命的: "
+
+#: ../../../src/common/logging.c:266
+#, c-format
+msgid "error: "
+msgstr "错误: "
+
+#: ../../../src/common/logging.c:273
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98 ../../common/fe_memutils.c:162
+#, c-format
+msgid "out of memory\n"
+msgstr "内存不足\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "无法复制空指针 (内部错误)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "无法找到有效的用户ID %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "用户不存在"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "用户名查找失败:错误代码%lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "取消发送的请求\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "无法发送取消请求: "
+
+#: ../../fe_utils/connect_utils.c:49 ../../fe_utils/connect_utils.c:107
+msgid "Password: "
+msgstr "口令: "
+
+#: ../../fe_utils/connect_utils.c:92
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "无法连接到数据库 %s:内存不足"
+
+#: ../../fe_utils/connect_utils.c:120 pg_isready.c:145
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: ../../fe_utils/parallel_slot.c:302
+#, c-format
+msgid "too many jobs for this platform"
+msgstr "此平台的作业太多"
+
+#: ../../fe_utils/parallel_slot.c:522
+msgid "processing of database \"%s\" failed: %s"
+msgstr "处理数据库\"%s\"失败:%s"
+
+#: ../../fe_utils/print.c:336
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu 行记录)"
+msgstr[1] "(%lu 行记录)"
+
+#: ../../fe_utils/print.c:3039
+#, c-format
+msgid "Interrupted\n"
+msgstr "已中断\n"
+
+#: ../../fe_utils/print.c:3103
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "无法对表的内容增加标题:已经超过%d列的数量.\n"
+
+#: ../../fe_utils/print.c:3143
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "无法对表的内容添加单元: 总共有%d个单元超过.\n"
+
+#: ../../fe_utils/print.c:3401
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "无效的输出格式 (内部错误): %d"
+
+#: ../../fe_utils/query_utils.c:33 ../../fe_utils/query_utils.c:58
+#, c-format
+msgid "query failed: %s"
+msgstr "查询失败: %s"
+
+#: ../../fe_utils/query_utils.c:34 ../../fe_utils/query_utils.c:59
+#, c-format
+msgid "query was: %s"
+msgstr "查询是: %s"
+
+#: clusterdb.c:112 clusterdb.c:131 createdb.c:123 createdb.c:142
+#: createuser.c:172 createuser.c:187 dropdb.c:103 dropdb.c:112 dropdb.c:120
+#: dropuser.c:94 dropuser.c:109 dropuser.c:122 pg_isready.c:96 pg_isready.c:110
+#: reindexdb.c:174 reindexdb.c:193 vacuumdb.c:251 vacuumdb.c:270
+#, c-format
+msgid "Try \"%s --help\" for more information.\n"
+msgstr "请用 \"%s --help\" 获取更多的信息.\n"
+
+#: clusterdb.c:129 createdb.c:140 createuser.c:185 dropdb.c:118 dropuser.c:107
+#: pg_isready.c:108 reindexdb.c:191 vacuumdb.c:268
+#, c-format
+msgid "too many command-line arguments (first is \"%s\")"
+msgstr "命令行参数太多 (第一个是 \"%s\")"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的数据库同时建簇"
+
+#: clusterdb.c:154
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定表进行建簇"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库 \"%2$s\" 中的表 \"%1$s\" 建簇失败: %3$s"
+
+#: clusterdb.c:223
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "数据库 \"%s\" 建簇失败: %s"
+
+#: clusterdb.c:251
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: 对数据库 \"%s\" 进行建簇\n"
+
+#: clusterdb.c:267
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s 对一个数据库中先前已经建过簇的表进行建簇.\n"
+"\n"
+
+#: clusterdb.c:268 createdb.c:267 createuser.c:351 dropdb.c:171 dropuser.c:169
+#: pg_isready.c:225 reindexdb.c:792 vacuumdb.c:1025
+#, c-format
+msgid "Usage:\n"
+msgstr "使用方法:\n"
+
+#: clusterdb.c:269 reindexdb.c:793 vacuumdb.c:1026
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [选项]... [数据库名字]\n"
+
+#: clusterdb.c:270 createdb.c:269 createuser.c:353 dropdb.c:173 dropuser.c:171
+#: pg_isready.c:228 reindexdb.c:794 vacuumdb.c:1027
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"选项:\n"
+
+#: clusterdb.c:271
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all 对所有数据库建簇\n"
+
+#: clusterdb.c:272
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME 对数据库 DBNAME 建簇\n"
+
+#: clusterdb.c:273 createuser.c:357 dropdb.c:174 dropuser.c:172
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 显示发送到服务端的命令\n"
+
+#: clusterdb.c:274
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 不写任何信息\n"
+
+#: clusterdb.c:275
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE 只对指定的表建簇\n"
+
+#: clusterdb.c:276
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 写大量的输出\n"
+
+#: clusterdb.c:277 createuser.c:369 dropdb.c:177 dropuser.c:175
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: clusterdb.c:278 createuser.c:374 dropdb.c:179 dropuser.c:177
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助, 然后退出\n"
+
+#: clusterdb.c:279 createdb.c:280 createuser.c:375 dropdb.c:180 dropuser.c:178
+#: pg_isready.c:234 reindexdb.c:809 vacuumdb.c:1052
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"联接选项:\n"
+
+#: clusterdb.c:280 createuser.c:376 dropdb.c:181 dropuser.c:179 vacuumdb.c:1053
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAM 数据库服务器所在机器的主机名或套接字目录\n"
+
+#: clusterdb.c:281 createuser.c:377 dropdb.c:182 dropuser.c:180 vacuumdb.c:1054
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 数据库服务器端口号\n"
+
+#: clusterdb.c:282 dropdb.c:183 vacuumdb.c:1055
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 联接的用户名\n"
+
+#: clusterdb.c:283 createuser.c:379 dropdb.c:184 dropuser.c:182 vacuumdb.c:1056
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 永远不提示输入口令\n"
+
+#: clusterdb.c:284 createuser.c:380 dropdb.c:185 dropuser.c:183 vacuumdb.c:1057
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 强制提示输入口令\n"
+
+#: clusterdb.c:285 dropdb.c:186 vacuumdb.c:1058
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 更改维护数据库\n"
+
+#: clusterdb.c:286
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"阅读 SQL 命令 CLUSTER 的描述信息, 以便获得更详细的信息.\n"
+
+#: clusterdb.c:287 createdb.c:288 createuser.c:381 dropdb.c:187 dropuser.c:184
+#: pg_isready.c:239 reindexdb.c:817 vacuumdb.c:1060
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"臭虫报告至<%s>.\n"
+
+#: clusterdb.c:288 createdb.c:289 createuser.c:382 dropdb.c:188 dropuser.c:185
+#: pg_isready.c:240 reindexdb.c:818 vacuumdb.c:1061
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 主页: <%s>\n"
+
+#: common.c:107
+#, c-format
+msgid "query returned %d row instead of one: %s"
+msgid_plural "query returned %d rows instead of one: %s"
+msgstr[0] "查询返回了%d条记录,而不是一条记录: %s"
+msgstr[1] "查询返回了%d条记录,而不是一条记录: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:131
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:133
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:143
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:164
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "请回答\"%s\"或\"%s\".\n"
+
+#: createdb.c:150
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "只能指定--locale和--lc-ctype这两个选项之一"
+
+#: createdb.c:155
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "只能指定--locale和--lc-collate这两个选项之一"
+
+#: createdb.c:166
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" 是一个无效编码名"
+
+#: createdb.c:229
+#, c-format
+msgid "database creation failed: %s"
+msgstr "创建数据库失败: %s"
+
+#: createdb.c:248
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "创建注释失败 (数据库已创建): %s"
+
+#: createdb.c:266
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 创建一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: createdb.c:268
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [选项]... [数据库名称] [描述]\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE 数据库默认表空间\n"
+
+#: createdb.c:271 reindexdb.c:798
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 显示发送到服务端的命令\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING 数据库编码\n"
+
+#: createdb.c:273
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE 数据库的本地化设置\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE 数据库的LC_COLLATE设置\n"
+
+#: createdb.c:275
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE 数据库的LC_CTYPE设置\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER 新数据库的所属用户\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE 要拷贝的数据库模板\n"
+
+#: createdb.c:278 reindexdb.c:807
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: createdb.c:279 reindexdb.c:808
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助, 然后退出\n"
+
+#: createdb.c:281 reindexdb.c:810
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME 数据库服务器所在机器的主机名或套接字目录\n"
+
+#: createdb.c:282 reindexdb.c:811
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 数据库服务器端口号\n"
+
+#: createdb.c:283 reindexdb.c:812
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 联接的用户名\n"
+
+#: createdb.c:284 reindexdb.c:813
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 永远不提示输入口令\n"
+
+#: createdb.c:285 reindexdb.c:814
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 强制提示输入口令\n"
+
+#: createdb.c:286 reindexdb.c:815
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 更改维护数据库\n"
+
+#: createdb.c:287
+#, c-format
+msgid ""
+"\n"
+"By default, a database with the same name as the current user is created.\n"
+msgstr ""
+"\n"
+"默认情况下, 以当前用户的用户名创建数据库.\n"
+
+#: createuser.c:151
+msgid "invalid value for --connection-limit: %s"
+msgstr "--connection-limit的值无效: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "输入要增加的角色名称: "
+
+#: createuser.c:210
+msgid "Enter password for new role: "
+msgstr "为新角色输入的口令: "
+
+#: createuser.c:211
+msgid "Enter it again: "
+msgstr "再输入一遍: "
+
+#: createuser.c:214
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "口令不匹配.\n"
+
+#: createuser.c:222
+msgid "Shall the new role be a superuser?"
+msgstr "新的角色是否是超级用户?"
+
+#: createuser.c:237
+msgid "Shall the new role be allowed to create databases?"
+msgstr "新的角色允许创建数据库吗?"
+
+#: createuser.c:245
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "新角色允许创建其它新的角色吗? "
+
+#: createuser.c:281
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "密码加密失败: %s"
+
+#: createuser.c:336
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "创建新用户失败: %s"
+
+#: createuser.c:350
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s 创建一个新的 PostgreSQL 用户.\n"
+"\n"
+
+#: createuser.c:352 dropuser.c:170
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [选项]... [用户名]\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N 角色的连接限制(缺省: 没有限制)\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb 此角色可以创建新数据库\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb 此角色不可以创建新数据库(默认)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE 新的角色必须是这个角色的成员\n"
+
+#: createuser.c:359
+#, c-format
+msgid ""
+" -i, --inherit role inherits privileges of roles it is a\n"
+" member of (default)\n"
+msgstr ""
+" -i, --inherit 角色能够继承它所属角色的权限\n"
+" (这是缺省情况)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit 角色不继承权限\n"
+
+#: createuser.c:362
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login 角色能够登录(这是缺省情况)\n"
+
+#: createuser.c:363
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login 角色不能登录\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt 给新角色指定口令\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole 这个角色可以创建新的角色\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole 这个角色没有创建其它角色的权限(默认)\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser 角色将是超级用户\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser 角色不能是超级用户(默认)\n"
+
+#: createuser.c:370
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive 提示缺少角色名及其属性\n"
+" 而不是使用默认值\n"
+
+#: createuser.c:372
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication 角色能启动复制\n"
+
+#: createuser.c:373
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication 角色不能启动复制\n"
+
+#: createuser.c:378
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=USERNAME 联接用户 (不是要创建的用户名)\n"
+
+#: dropdb.c:111
+#, c-format
+msgid "missing required argument database name"
+msgstr "缺少需要的数据库名参数"
+
+#: dropdb.c:126
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "数据库 \"%s\" 将被永久的删除.\n"
+
+#: dropdb.c:127 dropuser.c:130
+msgid "Are you sure?"
+msgstr "您确定吗? (y/n) "
+
+#: dropdb.c:156
+#, c-format
+msgid "database removal failed: %s"
+msgstr "数据库删除失败: %s"
+
+#: dropdb.c:170
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 删除一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: dropdb.c:172
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [选项]... 数据库名\n"
+
+#: dropdb.c:175
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force 强尝试在删除之前终止其他连接\n"
+
+#: dropdb.c:176
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive 删除任何东西之前给予提示\n"
+
+#: dropdb.c:178
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists 如果数据库不存在则不报告错误\n"
+
+#: dropuser.c:117
+msgid "Enter name of role to drop: "
+msgstr "输入要删除的用户名: "
+
+#: dropuser.c:121
+#, c-format
+msgid "missing required argument role name"
+msgstr "缺少需要的参数角色名"
+
+#: dropuser.c:129
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "用户 \"%s\" 将被永久删除.\n"
+
+#: dropuser.c:153
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "删除用户 \"%s\" 失败: %s"
+
+#: dropuser.c:168
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s 删除一个 PostgreSQL 用户.\n"
+"\n"
+
+#: dropuser.c:173
+#, c-format
+msgid ""
+" -i, --interactive prompt before deleting anything, and prompt for\n"
+" role name if not specified\n"
+msgstr ""
+" -i, --interactive 删除任何东西之前给予提示, 如果没有指定\n"
+" 角色名也给予提示\n"
+
+#: dropuser.c:176
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists 用户名不存在时则不报告错误\n"
+
+#: dropuser.c:181
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=USERNAME 联接用户 (不是要删除的用户名)\n"
+
+#: pg_isready.c:153
+#, c-format
+msgid "could not fetch default options"
+msgstr "无法取得缺省选项"
+
+#: pg_isready.c:202
+#, c-format
+msgid "accepting connections\n"
+msgstr "接受连接\n"
+
+#: pg_isready.c:205
+#, c-format
+msgid "rejecting connections\n"
+msgstr "拒绝连接\n"
+
+#: pg_isready.c:208
+#, c-format
+msgid "no response\n"
+msgstr "没有响应\n"
+
+#: pg_isready.c:211
+#, c-format
+msgid "no attempt\n"
+msgstr "没有尝试\n"
+
+#: pg_isready.c:214
+#, c-format
+msgid "unknown\n"
+msgstr "未知\n"
+
+#: pg_isready.c:224
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 发起一个到指定 PostgreSQL数据库的连接检查.\n"
+"\n"
+
+#: pg_isready.c:226
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [选项]...\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME 数据库名\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet 静默运行\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: pg_isready.c:232
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助, 然后退出\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=主机名 数据库服务器的主机名或套接字目录\n"
+
+#: pg_isready.c:236
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 数据库服务器端口\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"
+msgstr " -t, --timeout=SECS 尝试连接时要等待的秒数, 值为0表示禁用(缺省值: %s)\n"
+
+#: pg_isready.c:238
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 连接的用户名\n"
+
+#: reindexdb.c:157 vacuumdb.c:198
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "并行工作的数量必须至少为1"
+
+#: reindexdb.c:210
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的索引同时进行索引重建操作"
+
+#: reindexdb.c:215
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "无法对所有数据库和系统目录同时进行索引重建操作"
+
+#: reindexdb.c:220
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "无法在所有数据库中对指定模式上的索引进行重建"
+
+#: reindexdb.c:225
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定表上的索引进行重建"
+
+#: reindexdb.c:230
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "无法在所有数据库中对指定的索引进行重建"
+
+#: reindexdb.c:243
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "无法对指定的模式和系统目录同时进行索引重建"
+
+#: reindexdb.c:248
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "无法对指定的表和系统视图同时进行索引重建操作"
+
+#: reindexdb.c:253
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "无法对指定索引和系统视图同时进行索引重建操作"
+
+#: reindexdb.c:259
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "无法使用多个作业重新索引系统目录"
+
+#: reindexdb.c:288
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "无法使用多个作业重新索引索引"
+
+#: reindexdb.c:353 reindexdb.c:361 vacuumdb.c:471 vacuumdb.c:479 vacuumdb.c:487
+#: vacuumdb.c:495 vacuumdb.c:503 vacuumdb.c:511 vacuumdb.c:518 vacuumdb.c:525
+#: vacuumdb.c:532
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "不能在PostgreSQL %2$s之前的服务器版本上使用 \"%1$s\" 选项"
+
+#: reindexdb.c:401
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "无法同时重新索引系统目录,跳过所有"
+
+#: reindexdb.c:605
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "在数据库\"%s\"上重新创建索引失败: %s"
+
+#: reindexdb.c:609
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对索引\"%1$s\"重新创建失败: %3$s"
+
+#: reindexdb.c:613
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对模式\"%1$s\"的索引重建失败:%3$s"
+
+#: reindexdb.c:617
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "在数据库\"%s\"中重新索引系统目录失败: %s"
+
+#: reindexdb.c:621
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对表\"%1$s\"上的索引重新创建失败: %3$s"
+
+#: reindexdb.c:774
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: 对数据库 \"%s\" 重新创建索引\n"
+
+#: reindexdb.c:791
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 对一个PostgreSQL 数据库重新创建索引.\n"
+"\n"
+
+#: reindexdb.c:795
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all 对所有数据库进行重建索引操作\n"
+
+#: reindexdb.c:796
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently 同时重新索引\n"
+
+#: reindexdb.c:797
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME 对数据库中的索引进行重建\n"
+
+#: reindexdb.c:799
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX 仅重新创建指定的索引\n"
+
+#: reindexdb.c:800
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM 使用这么多并发连接来重新创建索引\n"
+
+#: reindexdb.c:801
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 不写任何信息\n"
+
+#: reindexdb.c:802
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system 对系统视图重新创建索引\n"
+
+#: reindexdb.c:803
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA 只对指定模式重建索引\n"
+
+#: reindexdb.c:804
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE 只对指定的表重新创建索引\n"
+
+#: reindexdb.c:805
+msgid " --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"
+msgstr " --tablespace=TABLESPACE 重建索引的表空间\n"
+
+#: reindexdb.c:806
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 写大量的输出\n"
+
+#: reindexdb.c:816
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"阅读SQL命令REINDEX的描述信息, 以便获得更详细的信息.\n"
+
+#: vacuumdb.c:206
+msgid "parallel workers for vacuum must be greater than or equal to zero"
+msgstr "真空平行工作必须大于或等于零"
+
+#: vacuumdb.c:226
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "最小事务ID必须至少为1"
+
+#: vacuumdb.c:234
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "最小多事务ID必须至少为1"
+
+#: vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290 vacuumdb.c:296 vacuumdb.c:302
+#: vacuumdb.c:308 vacuumdb.c:314 vacuumdb.c:326
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "在只执行分析的时候,无法使用\"%s\"选项"
+
+#: vacuumdb.c:332
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "执行完全真空时,无法使用\"%s\"选项"
+
+#: vacuumdb.c:341
+msgid "cannot use the \"%s\" option with the \"%s\" option"
+msgstr "无法将\"%s\"选项与\"%s\"选项一起使用"
+
+#: vacuumdb.c:363
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的数据库同时清理"
+
+#: vacuumdb.c:368
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定的表进行清理"
+
+#: vacuumdb.c:458
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "产生最小优化器统计(一个目标)"
+
+#: vacuumdb.c:459
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "产生中等优化器统计(10个目标)"
+
+#: vacuumdb.c:460
+msgid "Generating default (full) optimizer statistics"
+msgstr "产生缺省(完全)优化器统计"
+
+#: vacuumdb.c:540
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s:处理数据库\"%s\":%s\n"
+
+#: vacuumdb.c:543
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: 清理数据库 \"%s\"\n"
+
+#: vacuumdb.c:1013
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库 \"%2$s\" 中的表 \"%1$s\" 清理失败: %3$s"
+
+#: vacuumdb.c:1016
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "数据库 \"%s\" 清理失败: %s"
+
+#: vacuumdb.c:1024
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 清理并且优化一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: vacuumdb.c:1028
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all 清理所有的数据库\n"
+
+#: vacuumdb.c:1029
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME 清理数据库 DBNAME\n"
+
+#: vacuumdb.c:1030
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping 禁用所有页面跳过行为\n"
+
+#: vacuumdb.c:1031
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 显示发送到服务端的命令\n"
+
+#: vacuumdb.c:1032
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full 完全清理\n"
+
+#: vacuumdb.c:1033
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze 冻结记录的事务信息\n"
+
+#: vacuumdb.c:1034
+#, c-format
+msgid " --force-index-cleanup always remove index entries that point to dead tuples\n"
+msgstr " --force-index-cleanup 始终删除指向死元组的索引项\n"
+
+#: vacuumdb.c:1035
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM 使用这么多个并发连接进行清理\n"
+
+#: vacuumdb.c:1036
+#, c-format
+msgid " --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"
+msgstr " --min-mxid-age=MXID_AGE 清理表的最小多事务ID\n"
+
+#: vacuumdb.c:1037
+#, c-format
+msgid " --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"
+msgstr " --min-xid-age=XID_AGE 清理表的最小事务ID\n"
+
+#: vacuumdb.c:1038
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr " --no-index-cleanup 不要删除指向死元组的索引项\n"
+
+#: vacuumdb.c:1039
+#, c-format
+msgid " --no-process-toast skip the TOAST table associated with the table to vacuum\n"
+msgstr " --no-process-toast 跳过与该表关联的TOAST表以使用真空\n"
+
+#: vacuumdb.c:1040
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate 不要截断表末尾的空白页\n"
+
+#: vacuumdb.c:1041
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLEL_WORKERS 如果可以的话,用这么多的后台工作来制作真空\n"
+
+#: vacuumdb.c:1042
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 不写任何信息\n"
+
+#: vacuumdb.c:1043
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked 跳过不能立即锁定的关系\n"
+
+#: vacuumdb.c:1044
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLUMNS)]' 只清理指定的表\n"
+
+#: vacuumdb.c:1045
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 写大量的输出\n"
+
+#: vacuumdb.c:1046
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: vacuumdb.c:1047
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze 更新优化器统计\n"
+
+#: vacuumdb.c:1048
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only 只更新优化器统计信息,但不做清理\n"
+
+#: vacuumdb.c:1049
+#, c-format
+msgid ""
+" --analyze-in-stages only update optimizer statistics, in multiple\n"
+" stages for faster results; no vacuum\n"
+msgstr ""
+" --analyze-in-stages 只更新优化器统计, 为了更快得到结果分多阶段;\n"
+" 不做清理\n"
+
+#: vacuumdb.c:1051
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助信息, 然后退出\n"
+
+#: vacuumdb.c:1059
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"阅读 SQL 命令 VACUUM 的描述信息, 以便获得更详细的信息.\n"
+
diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c
new file mode 100644
index 0000000..7638b01
--- /dev/null
+++ b/src/bin/scripts/reindexdb.c
@@ -0,0 +1,819 @@
+/*-------------------------------------------------------------------------
+ *
+ * reindexdb
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/reindexdb.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+
+#include "catalog/pg_class_d.h"
+#include "common.h"
+#include "common/connect.h"
+#include "common/logging.h"
+#include "fe_utils/cancel.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/parallel_slot.h"
+#include "fe_utils/query_utils.h"
+#include "fe_utils/simple_list.h"
+#include "fe_utils/string_utils.h"
+
+typedef enum ReindexType
+{
+ REINDEX_DATABASE,
+ REINDEX_INDEX,
+ REINDEX_SCHEMA,
+ REINDEX_SYSTEM,
+ REINDEX_TABLE
+} ReindexType;
+
+
+static SimpleStringList *get_parallel_object_list(PGconn *conn,
+ ReindexType type,
+ SimpleStringList *user_list,
+ bool echo);
+static void reindex_one_database(ConnParams *cparams, ReindexType type,
+ SimpleStringList *user_list,
+ const char *progname,
+ bool echo, bool verbose, bool concurrently,
+ int concurrentCons, const char *tablespace);
+static void reindex_all_databases(ConnParams *cparams,
+ const char *progname, bool echo,
+ bool quiet, bool verbose, bool concurrently,
+ int concurrentCons, const char *tablespace);
+static void run_reindex_command(PGconn *conn, ReindexType type,
+ const char *name, bool echo, bool verbose,
+ bool concurrently, bool async,
+ const char *tablespace);
+
+static void help(const char *progname);
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"schema", required_argument, NULL, 'S'},
+ {"dbname", required_argument, NULL, 'd'},
+ {"all", no_argument, NULL, 'a'},
+ {"system", no_argument, NULL, 's'},
+ {"table", required_argument, NULL, 't'},
+ {"index", required_argument, NULL, 'i'},
+ {"jobs", required_argument, NULL, 'j'},
+ {"verbose", no_argument, NULL, 'v'},
+ {"concurrently", no_argument, NULL, 1},
+ {"maintenance-db", required_argument, NULL, 2},
+ {"tablespace", required_argument, NULL, 3},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+
+ const char *dbname = NULL;
+ const char *maintenance_db = NULL;
+ const char *host = NULL;
+ const char *port = NULL;
+ const char *username = NULL;
+ const char *tablespace = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool syscatalog = false;
+ bool alldb = false;
+ bool echo = false;
+ bool quiet = false;
+ bool verbose = false;
+ bool concurrently = false;
+ SimpleStringList indexes = {NULL, NULL};
+ SimpleStringList tables = {NULL, NULL};
+ SimpleStringList schemas = {NULL, NULL};
+ int concurrentCons = 1;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "reindexdb", help);
+
+ /* process command-line options */
+ while ((c = getopt_long(argc, argv, "h:p:U:wWeqS:d:ast:i:j:v", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 'S':
+ simple_string_list_append(&schemas, optarg);
+ break;
+ case 'd':
+ dbname = pg_strdup(optarg);
+ break;
+ case 'a':
+ alldb = true;
+ break;
+ case 's':
+ syscatalog = true;
+ break;
+ case 't':
+ simple_string_list_append(&tables, optarg);
+ break;
+ case 'i':
+ simple_string_list_append(&indexes, optarg);
+ break;
+ case 'j':
+ concurrentCons = atoi(optarg);
+ if (concurrentCons <= 0)
+ {
+ pg_log_error("number of parallel jobs must be at least 1");
+ exit(1);
+ }
+ break;
+ case 'v':
+ verbose = true;
+ break;
+ case 1:
+ concurrently = true;
+ break;
+ case 2:
+ maintenance_db = pg_strdup(optarg);
+ break;
+ case 3:
+ tablespace = pg_strdup(optarg);
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ /*
+ * Non-option argument specifies database name as long as it wasn't
+ * already specified with -d / --dbname
+ */
+ if (optind < argc && dbname == NULL)
+ {
+ dbname = argv[optind];
+ optind++;
+ }
+
+ if (optind < argc)
+ {
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ /* fill cparams except for dbname, which is set below */
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ setup_cancel_handler(NULL);
+
+ if (alldb)
+ {
+ if (dbname)
+ {
+ pg_log_error("cannot reindex all databases and a specific one at the same time");
+ exit(1);
+ }
+ if (syscatalog)
+ {
+ pg_log_error("cannot reindex all databases and system catalogs at the same time");
+ exit(1);
+ }
+ if (schemas.head != NULL)
+ {
+ pg_log_error("cannot reindex specific schema(s) in all databases");
+ exit(1);
+ }
+ if (tables.head != NULL)
+ {
+ pg_log_error("cannot reindex specific table(s) in all databases");
+ exit(1);
+ }
+ if (indexes.head != NULL)
+ {
+ pg_log_error("cannot reindex specific index(es) in all databases");
+ exit(1);
+ }
+
+ cparams.dbname = maintenance_db;
+
+ reindex_all_databases(&cparams, progname, echo, quiet, verbose,
+ concurrently, concurrentCons, tablespace);
+ }
+ else if (syscatalog)
+ {
+ if (schemas.head != NULL)
+ {
+ pg_log_error("cannot reindex specific schema(s) and system catalogs at the same time");
+ exit(1);
+ }
+ if (tables.head != NULL)
+ {
+ pg_log_error("cannot reindex specific table(s) and system catalogs at the same time");
+ exit(1);
+ }
+ if (indexes.head != NULL)
+ {
+ pg_log_error("cannot reindex specific index(es) and system catalogs at the same time");
+ exit(1);
+ }
+
+ if (concurrentCons > 1)
+ {
+ pg_log_error("cannot use multiple jobs to reindex system catalogs");
+ exit(1);
+ }
+
+ if (dbname == NULL)
+ {
+ if (getenv("PGDATABASE"))
+ dbname = getenv("PGDATABASE");
+ else if (getenv("PGUSER"))
+ dbname = getenv("PGUSER");
+ else
+ dbname = get_user_name_or_exit(progname);
+ }
+
+ cparams.dbname = dbname;
+
+ reindex_one_database(&cparams, REINDEX_SYSTEM, NULL,
+ progname, echo, verbose,
+ concurrently, 1, tablespace);
+ }
+ else
+ {
+ /*
+ * Index-level REINDEX is not supported with multiple jobs as we
+ * cannot control the concurrent processing of multiple indexes
+ * depending on the same relation.
+ */
+ if (concurrentCons > 1 && indexes.head != NULL)
+ {
+ pg_log_error("cannot use multiple jobs to reindex indexes");
+ exit(1);
+ }
+
+ if (dbname == NULL)
+ {
+ if (getenv("PGDATABASE"))
+ dbname = getenv("PGDATABASE");
+ else if (getenv("PGUSER"))
+ dbname = getenv("PGUSER");
+ else
+ dbname = get_user_name_or_exit(progname);
+ }
+
+ cparams.dbname = dbname;
+
+ if (schemas.head != NULL)
+ reindex_one_database(&cparams, REINDEX_SCHEMA, &schemas,
+ progname, echo, verbose,
+ concurrently, concurrentCons, tablespace);
+
+ if (indexes.head != NULL)
+ reindex_one_database(&cparams, REINDEX_INDEX, &indexes,
+ progname, echo, verbose,
+ concurrently, 1, tablespace);
+
+ if (tables.head != NULL)
+ reindex_one_database(&cparams, REINDEX_TABLE, &tables,
+ progname, echo, verbose,
+ concurrently, concurrentCons, tablespace);
+
+ /*
+ * reindex database only if neither index nor table nor schema is
+ * specified
+ */
+ if (indexes.head == NULL && tables.head == NULL && schemas.head == NULL)
+ reindex_one_database(&cparams, REINDEX_DATABASE, NULL,
+ progname, echo, verbose,
+ concurrently, concurrentCons, tablespace);
+ }
+
+ exit(0);
+}
+
+static void
+reindex_one_database(ConnParams *cparams, ReindexType type,
+ SimpleStringList *user_list,
+ const char *progname, bool echo,
+ bool verbose, bool concurrently, int concurrentCons,
+ const char *tablespace)
+{
+ PGconn *conn;
+ SimpleStringListCell *cell;
+ bool parallel = concurrentCons > 1;
+ SimpleStringList *process_list = user_list;
+ ReindexType process_type = type;
+ ParallelSlotArray *sa;
+ bool failed = false;
+ int items_count = 0;
+
+ conn = connectDatabase(cparams, progname, echo, false, false);
+
+ if (concurrently && PQserverVersion(conn) < 120000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "concurrently", "12");
+ exit(1);
+ }
+
+ if (tablespace && PQserverVersion(conn) < 140000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "tablespace", "14");
+ exit(1);
+ }
+
+ if (!parallel)
+ {
+ switch (process_type)
+ {
+ case REINDEX_DATABASE:
+ case REINDEX_SYSTEM:
+
+ /*
+ * Database and system reindexes only need to work on the
+ * database itself, so build a list with a single entry.
+ */
+ Assert(user_list == NULL);
+ process_list = pg_malloc0(sizeof(SimpleStringList));
+ simple_string_list_append(process_list, PQdb(conn));
+ break;
+
+ case REINDEX_INDEX:
+ case REINDEX_SCHEMA:
+ case REINDEX_TABLE:
+ Assert(user_list != NULL);
+ break;
+ }
+ }
+ else
+ {
+ switch (process_type)
+ {
+ case REINDEX_DATABASE:
+
+ /*
+ * Database-wide parallel reindex requires special processing.
+ * If multiple jobs were asked, we have to reindex system
+ * catalogs first as they cannot be processed in parallel.
+ */
+ if (concurrently)
+ pg_log_warning("cannot reindex system catalogs concurrently, skipping all");
+ else
+ run_reindex_command(conn, REINDEX_SYSTEM, PQdb(conn), echo,
+ verbose, concurrently, false,
+ tablespace);
+
+ /* Build a list of relations from the database */
+ process_list = get_parallel_object_list(conn, process_type,
+ user_list, echo);
+ process_type = REINDEX_TABLE;
+
+ /* Bail out if nothing to process */
+ if (process_list == NULL)
+ return;
+ break;
+
+ case REINDEX_SCHEMA:
+ Assert(user_list != NULL);
+
+ /* Build a list of relations from all the schemas */
+ process_list = get_parallel_object_list(conn, process_type,
+ user_list, echo);
+ process_type = REINDEX_TABLE;
+
+ /* Bail out if nothing to process */
+ if (process_list == NULL)
+ return;
+ break;
+
+ case REINDEX_SYSTEM:
+ case REINDEX_INDEX:
+ /* not supported */
+ Assert(false);
+ break;
+
+ case REINDEX_TABLE:
+
+ /*
+ * Fall through. The list of items for tables is already
+ * created.
+ */
+ break;
+ }
+ }
+
+ /*
+ * Adjust the number of concurrent connections depending on the items in
+ * the list. We choose the minimum between the number of concurrent
+ * connections and the number of items in the list.
+ */
+ for (cell = process_list->head; cell; cell = cell->next)
+ {
+ items_count++;
+
+ /* no need to continue if there are more elements than jobs */
+ if (items_count >= concurrentCons)
+ break;
+ }
+ concurrentCons = Min(concurrentCons, items_count);
+ Assert(concurrentCons > 0);
+
+ Assert(process_list != NULL);
+
+ sa = ParallelSlotsSetup(concurrentCons, cparams, progname, echo, NULL);
+ ParallelSlotsAdoptConn(sa, conn);
+
+ cell = process_list->head;
+ do
+ {
+ const char *objname = cell->val;
+ ParallelSlot *free_slot = NULL;
+
+ if (CancelRequested)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ free_slot = ParallelSlotsGetIdle(sa, NULL);
+ if (!free_slot)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ ParallelSlotSetHandler(free_slot, TableCommandResultHandler, NULL);
+ run_reindex_command(free_slot->connection, process_type, objname,
+ echo, verbose, concurrently, true, tablespace);
+
+ cell = cell->next;
+ } while (cell != NULL);
+
+ if (!ParallelSlotsWaitCompletion(sa))
+ failed = true;
+
+finish:
+ if (process_list != user_list)
+ {
+ simple_string_list_destroy(process_list);
+ pg_free(process_list);
+ }
+
+ ParallelSlotsTerminate(sa);
+ pfree(sa);
+
+ if (failed)
+ exit(1);
+}
+
+static void
+run_reindex_command(PGconn *conn, ReindexType type, const char *name,
+ bool echo, bool verbose, bool concurrently, bool async,
+ const char *tablespace)
+{
+ const char *paren = "(";
+ const char *comma = ", ";
+ const char *sep = paren;
+ PQExpBufferData sql;
+ bool status;
+
+ Assert(name);
+
+ /* build the REINDEX query */
+ initPQExpBuffer(&sql);
+
+ appendPQExpBufferStr(&sql, "REINDEX ");
+
+ if (verbose)
+ {
+ appendPQExpBuffer(&sql, "%sVERBOSE", sep);
+ sep = comma;
+ }
+
+ if (tablespace)
+ {
+ appendPQExpBuffer(&sql, "%sTABLESPACE %s", sep, fmtId(tablespace));
+ sep = comma;
+ }
+
+ if (sep != paren)
+ appendPQExpBufferStr(&sql, ") ");
+
+ /* object type */
+ switch (type)
+ {
+ case REINDEX_DATABASE:
+ appendPQExpBufferStr(&sql, "DATABASE ");
+ break;
+ case REINDEX_INDEX:
+ appendPQExpBufferStr(&sql, "INDEX ");
+ break;
+ case REINDEX_SCHEMA:
+ appendPQExpBufferStr(&sql, "SCHEMA ");
+ break;
+ case REINDEX_SYSTEM:
+ appendPQExpBufferStr(&sql, "SYSTEM ");
+ break;
+ case REINDEX_TABLE:
+ appendPQExpBufferStr(&sql, "TABLE ");
+ break;
+ }
+
+ /*
+ * Parenthesized grammar is only supported for CONCURRENTLY since
+ * PostgreSQL 14. Since 12, CONCURRENTLY can be specified after the
+ * object type.
+ */
+ if (concurrently)
+ appendPQExpBufferStr(&sql, "CONCURRENTLY ");
+
+ /* object name */
+ switch (type)
+ {
+ case REINDEX_DATABASE:
+ case REINDEX_SYSTEM:
+ appendPQExpBufferStr(&sql, fmtId(name));
+ break;
+ case REINDEX_INDEX:
+ case REINDEX_TABLE:
+ appendQualifiedRelation(&sql, name, conn, echo);
+ break;
+ case REINDEX_SCHEMA:
+ appendPQExpBufferStr(&sql, name);
+ break;
+ }
+
+ /* finish the query */
+ appendPQExpBufferChar(&sql, ';');
+
+ if (async)
+ {
+ if (echo)
+ printf("%s\n", sql.data);
+
+ status = PQsendQuery(conn, sql.data) == 1;
+ }
+ else
+ status = executeMaintenanceCommand(conn, sql.data, echo);
+
+ if (!status)
+ {
+ switch (type)
+ {
+ case REINDEX_DATABASE:
+ pg_log_error("reindexing of database \"%s\" failed: %s",
+ PQdb(conn), PQerrorMessage(conn));
+ break;
+ case REINDEX_INDEX:
+ pg_log_error("reindexing of index \"%s\" in database \"%s\" failed: %s",
+ name, PQdb(conn), PQerrorMessage(conn));
+ break;
+ case REINDEX_SCHEMA:
+ pg_log_error("reindexing of schema \"%s\" in database \"%s\" failed: %s",
+ name, PQdb(conn), PQerrorMessage(conn));
+ break;
+ case REINDEX_SYSTEM:
+ pg_log_error("reindexing of system catalogs in database \"%s\" failed: %s",
+ PQdb(conn), PQerrorMessage(conn));
+ break;
+ case REINDEX_TABLE:
+ pg_log_error("reindexing of table \"%s\" in database \"%s\" failed: %s",
+ name, PQdb(conn), PQerrorMessage(conn));
+ break;
+ }
+ if (!async)
+ {
+ PQfinish(conn);
+ exit(1);
+ }
+ }
+
+ termPQExpBuffer(&sql);
+}
+
+/*
+ * Prepare the list of objects to process by querying the catalogs.
+ *
+ * This function will return a SimpleStringList object containing the entire
+ * list of tables in the given database that should be processed by a parallel
+ * database-wide reindex (excluding system tables), or NULL if there's no such
+ * table.
+ */
+static SimpleStringList *
+get_parallel_object_list(PGconn *conn, ReindexType type,
+ SimpleStringList *user_list, bool echo)
+{
+ PQExpBufferData catalog_query;
+ PQExpBufferData buf;
+ PGresult *res;
+ SimpleStringList *tables;
+ int ntups,
+ i;
+
+ initPQExpBuffer(&catalog_query);
+
+ /*
+ * The queries here are using a safe search_path, so there's no need to
+ * fully qualify everything.
+ */
+ switch (type)
+ {
+ case REINDEX_DATABASE:
+ Assert(user_list == NULL);
+ appendPQExpBufferStr(&catalog_query,
+ "SELECT c.relname, ns.nspname\n"
+ " FROM pg_catalog.pg_class c\n"
+ " JOIN pg_catalog.pg_namespace ns"
+ " ON c.relnamespace = ns.oid\n"
+ " WHERE ns.nspname != 'pg_catalog'\n"
+ " AND c.relkind IN ("
+ CppAsString2(RELKIND_RELATION) ", "
+ CppAsString2(RELKIND_MATVIEW) ")\n"
+ " ORDER BY c.relpages DESC;");
+ break;
+
+ case REINDEX_SCHEMA:
+ {
+ SimpleStringListCell *cell;
+ bool nsp_listed = false;
+
+ Assert(user_list != NULL);
+
+ /*
+ * All the tables from all the listed schemas are grabbed at
+ * once.
+ */
+ appendPQExpBufferStr(&catalog_query,
+ "SELECT c.relname, ns.nspname\n"
+ " FROM pg_catalog.pg_class c\n"
+ " JOIN pg_catalog.pg_namespace ns"
+ " ON c.relnamespace = ns.oid\n"
+ " WHERE c.relkind IN ("
+ CppAsString2(RELKIND_RELATION) ", "
+ CppAsString2(RELKIND_MATVIEW) ")\n"
+ " AND ns.nspname IN (");
+
+ for (cell = user_list->head; cell; cell = cell->next)
+ {
+ const char *nspname = cell->val;
+
+ if (nsp_listed)
+ appendPQExpBufferStr(&catalog_query, ", ");
+ else
+ nsp_listed = true;
+
+ appendStringLiteralConn(&catalog_query, nspname, conn);
+ }
+
+ appendPQExpBufferStr(&catalog_query, ")\n"
+ " ORDER BY c.relpages DESC;");
+ }
+ break;
+
+ case REINDEX_SYSTEM:
+ case REINDEX_INDEX:
+ case REINDEX_TABLE:
+ Assert(false);
+ break;
+ }
+
+ res = executeQuery(conn, catalog_query.data, echo);
+ termPQExpBuffer(&catalog_query);
+
+ /*
+ * If no rows are returned, there are no matching tables, so we are done.
+ */
+ ntups = PQntuples(res);
+ if (ntups == 0)
+ {
+ PQclear(res);
+ PQfinish(conn);
+ return NULL;
+ }
+
+ tables = pg_malloc0(sizeof(SimpleStringList));
+
+ /* Build qualified identifiers for each table */
+ initPQExpBuffer(&buf);
+ for (i = 0; i < ntups; i++)
+ {
+ appendPQExpBufferStr(&buf,
+ fmtQualifiedId(PQgetvalue(res, i, 1),
+ PQgetvalue(res, i, 0)));
+
+ simple_string_list_append(tables, buf.data);
+ resetPQExpBuffer(&buf);
+ }
+ termPQExpBuffer(&buf);
+ PQclear(res);
+
+ return tables;
+}
+
+static void
+reindex_all_databases(ConnParams *cparams,
+ const char *progname, bool echo, bool quiet, bool verbose,
+ bool concurrently, int concurrentCons,
+ const char *tablespace)
+{
+ PGconn *conn;
+ PGresult *result;
+ int i;
+
+ conn = connectMaintenanceDatabase(cparams, progname, echo);
+ result = executeQuery(conn, "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;", echo);
+ PQfinish(conn);
+
+ for (i = 0; i < PQntuples(result); i++)
+ {
+ char *dbname = PQgetvalue(result, i, 0);
+
+ if (!quiet)
+ {
+ printf(_("%s: reindexing database \"%s\"\n"), progname, dbname);
+ fflush(stdout);
+ }
+
+ cparams->override_dbname = dbname;
+
+ reindex_one_database(cparams, REINDEX_DATABASE, NULL,
+ progname, echo, verbose, concurrently,
+ concurrentCons, tablespace);
+ }
+
+ PQclear(result);
+}
+
+static void
+help(const char *progname)
+{
+ printf(_("%s reindexes a PostgreSQL database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [DBNAME]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -a, --all reindex all databases\n"));
+ printf(_(" --concurrently reindex concurrently\n"));
+ printf(_(" -d, --dbname=DBNAME database to reindex\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -i, --index=INDEX recreate specific index(es) only\n"));
+ printf(_(" -j, --jobs=NUM use this many concurrent connections to reindex\n"));
+ printf(_(" -q, --quiet don't write any messages\n"));
+ printf(_(" -s, --system reindex system catalogs only\n"));
+ printf(_(" -S, --schema=SCHEMA reindex specific schema(s) only\n"));
+ printf(_(" -t, --table=TABLE reindex specific table(s) only\n"));
+ printf(_(" --tablespace=TABLESPACE tablespace where indexes are rebuilt\n"));
+ printf(_(" -v, --verbose write a lot of output\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_(" --maintenance-db=DBNAME alternate maintenance database\n"));
+ printf(_("\nRead the description of the SQL command REINDEX for details.\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}
diff --git a/src/bin/scripts/t/010_clusterdb.pl b/src/bin/scripts/t/010_clusterdb.pl
new file mode 100644
index 0000000..6d483be
--- /dev/null
+++ b/src/bin/scripts/t/010_clusterdb.pl
@@ -0,0 +1,36 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 14;
+
+program_help_ok('clusterdb');
+program_version_ok('clusterdb');
+program_options_handling_ok('clusterdb');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ ['clusterdb'],
+ qr/statement: CLUSTER;/,
+ 'SQL CLUSTER run');
+
+$node->command_fails([ 'clusterdb', '-t', 'nonexistent' ],
+ 'fails with nonexistent table');
+
+$node->safe_psql('postgres',
+ 'CREATE TABLE test1 (a int); CREATE INDEX test1x ON test1 (a); CLUSTER test1 USING test1x'
+);
+$node->issues_sql_like(
+ [ 'clusterdb', '-t', 'test1' ],
+ qr/statement: CLUSTER public\.test1;/,
+ 'cluster specific table');
+
+$node->command_ok([qw(clusterdb --echo --verbose dbname=template1)],
+ 'clusterdb with connection string');
diff --git a/src/bin/scripts/t/011_clusterdb_all.pl b/src/bin/scripts/t/011_clusterdb_all.pl
new file mode 100644
index 0000000..c7e8514
--- /dev/null
+++ b/src/bin/scripts/t/011_clusterdb_all.pl
@@ -0,0 +1,22 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 2;
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+# clusterdb -a is not compatible with -d, hence enforce environment variable
+# correctly.
+$ENV{PGDATABASE} = 'postgres';
+
+$node->issues_sql_like(
+ [ 'clusterdb', '-a' ],
+ qr/statement: CLUSTER.*statement: CLUSTER/s,
+ 'cluster all databases');
diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl
new file mode 100644
index 0000000..7261ebb
--- /dev/null
+++ b/src/bin/scripts/t/020_createdb.pl
@@ -0,0 +1,53 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 22;
+
+program_help_ok('createdb');
+program_version_ok('createdb');
+program_options_handling_ok('createdb');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ [ 'createdb', 'foobar1' ],
+ qr/statement: CREATE DATABASE foobar1/,
+ 'SQL CREATE DATABASE run');
+$node->issues_sql_like(
+ [ 'createdb', '-l', 'C', '-E', 'LATIN1', '-T', 'template0', 'foobar2' ],
+ qr/statement: CREATE DATABASE foobar2 ENCODING 'LATIN1'/,
+ 'create database with encoding');
+
+$node->command_fails([ 'createdb', 'foobar1' ],
+ 'fails if database already exists');
+
+# Check quote handling with incorrect option values.
+$node->command_checks_all(
+ [ 'createdb', '--encoding', "foo'; SELECT '1", 'foobar2' ],
+ 1,
+ [qr/^$/],
+ [qr/^createdb: error: "foo'; SELECT '1" is not a valid encoding name/s],
+ 'createdb with incorrect --encoding');
+$node->command_checks_all(
+ [ 'createdb', '--lc-collate', "foo'; SELECT '1", 'foobar2' ],
+ 1,
+ [qr/^$/],
+ [
+ qr/^createdb: error: database creation failed: ERROR: invalid locale name|^createdb: error: database creation failed: ERROR: new collation \(foo'; SELECT '1\) is incompatible with the collation of the template database/s
+ ],
+ 'createdb with incorrect --lc-collate');
+$node->command_checks_all(
+ [ 'createdb', '--lc-ctype', "foo'; SELECT '1", 'foobar2' ],
+ 1,
+ [qr/^$/],
+ [
+ qr/^createdb: error: database creation failed: ERROR: invalid locale name|^createdb: error: database creation failed: ERROR: new LC_CTYPE \(foo'; SELECT '1\) is incompatible with the LC_CTYPE of the template database/s
+ ],
+ 'createdb with incorrect --lc-ctype');
diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl
new file mode 100644
index 0000000..8fdd32d
--- /dev/null
+++ b/src/bin/scripts/t/040_createuser.pl
@@ -0,0 +1,37 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 17;
+
+program_help_ok('createuser');
+program_version_ok('createuser');
+program_options_handling_ok('createuser');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ [ 'createuser', 'regress_user1' ],
+ qr/statement: CREATE ROLE regress_user1 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;/,
+ 'SQL CREATE USER run');
+$node->issues_sql_like(
+ [ 'createuser', '-L', 'regress_role1' ],
+ qr/statement: CREATE ROLE regress_role1 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOLOGIN;/,
+ 'create a non-login role');
+$node->issues_sql_like(
+ [ 'createuser', '-r', 'regress_user2' ],
+ qr/statement: CREATE ROLE regress_user2 NOSUPERUSER NOCREATEDB CREATEROLE INHERIT LOGIN;/,
+ 'create a CREATEROLE user');
+$node->issues_sql_like(
+ [ 'createuser', '-s', 'regress_user3' ],
+ qr/statement: CREATE ROLE regress_user3 SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;/,
+ 'create a superuser');
+
+$node->command_fails([ 'createuser', 'regress_user1' ],
+ 'fails if role already exists');
diff --git a/src/bin/scripts/t/050_dropdb.pl b/src/bin/scripts/t/050_dropdb.pl
new file mode 100644
index 0000000..646cb4e
--- /dev/null
+++ b/src/bin/scripts/t/050_dropdb.pl
@@ -0,0 +1,32 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 13;
+
+program_help_ok('dropdb');
+program_version_ok('dropdb');
+program_options_handling_ok('dropdb');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->safe_psql('postgres', 'CREATE DATABASE foobar1');
+$node->issues_sql_like(
+ [ 'dropdb', 'foobar1' ],
+ qr/statement: DROP DATABASE foobar1/,
+ 'SQL DROP DATABASE run');
+
+$node->safe_psql('postgres', 'CREATE DATABASE foobar2');
+$node->issues_sql_like(
+ [ 'dropdb', '--force', 'foobar2' ],
+ qr/statement: DROP DATABASE foobar2 WITH \(FORCE\);/,
+ 'SQL DROP DATABASE (FORCE) run');
+
+$node->command_fails([ 'dropdb', 'nonexistent' ],
+ 'fails with nonexistent database');
diff --git a/src/bin/scripts/t/070_dropuser.pl b/src/bin/scripts/t/070_dropuser.pl
new file mode 100644
index 0000000..cbcb09b
--- /dev/null
+++ b/src/bin/scripts/t/070_dropuser.pl
@@ -0,0 +1,26 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 11;
+
+program_help_ok('dropuser');
+program_version_ok('dropuser');
+program_options_handling_ok('dropuser');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->safe_psql('postgres', 'CREATE ROLE regress_foobar1');
+$node->issues_sql_like(
+ [ 'dropuser', 'regress_foobar1' ],
+ qr/statement: DROP ROLE regress_foobar1/,
+ 'SQL DROP ROLE run');
+
+$node->command_fails([ 'dropuser', 'regress_nonexistent' ],
+ 'fails with nonexistent user');
diff --git a/src/bin/scripts/t/080_pg_isready.pl b/src/bin/scripts/t/080_pg_isready.pl
new file mode 100644
index 0000000..375f0fe
--- /dev/null
+++ b/src/bin/scripts/t/080_pg_isready.pl
@@ -0,0 +1,23 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 10;
+
+program_help_ok('pg_isready');
+program_version_ok('pg_isready');
+program_options_handling_ok('pg_isready');
+
+command_fails(['pg_isready'], 'fails with no server running');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->command_ok(
+ [ 'pg_isready', "--timeout=$TestLib::timeout_default" ],
+ 'succeeds with server running');
diff --git a/src/bin/scripts/t/090_reindexdb.pl b/src/bin/scripts/t/090_reindexdb.pl
new file mode 100644
index 0000000..8bdedcb
--- /dev/null
+++ b/src/bin/scripts/t/090_reindexdb.pl
@@ -0,0 +1,200 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 58;
+
+program_help_ok('reindexdb');
+program_version_ok('reindexdb');
+program_options_handling_ok('reindexdb');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$ENV{PGOPTIONS} = '--client-min-messages=WARNING';
+
+# Create a tablespace for testing.
+my $tbspace_path = $node->basedir . '/regress_reindex_tbspace';
+mkdir $tbspace_path or die "cannot create directory $tbspace_path";
+my $tbspace_name = 'reindex_tbspace';
+$node->safe_psql('postgres',
+ "CREATE TABLESPACE $tbspace_name LOCATION '$tbspace_path';");
+
+$node->issues_sql_like(
+ [ 'reindexdb', 'postgres' ],
+ qr/statement: REINDEX DATABASE postgres;/,
+ 'SQL REINDEX run');
+
+# Use text as data type to get a toast table.
+$node->safe_psql('postgres',
+ 'CREATE TABLE test1 (a text); CREATE INDEX test1x ON test1 (a);');
+# Collect toast table and index names of this relation, for later use.
+my $toast_table = $node->safe_psql('postgres',
+ "SELECT reltoastrelid::regclass FROM pg_class WHERE oid = 'test1'::regclass;"
+);
+my $toast_index = $node->safe_psql('postgres',
+ "SELECT indexrelid::regclass FROM pg_index WHERE indrelid = '$toast_table'::regclass;"
+);
+
+$node->issues_sql_like(
+ [ 'reindexdb', '-t', 'test1', 'postgres' ],
+ qr/statement: REINDEX TABLE public\.test1;/,
+ 'reindex specific table');
+$node->issues_sql_like(
+ [ 'reindexdb', '-t', 'test1', '--tablespace', $tbspace_name, 'postgres' ],
+ qr/statement: REINDEX \(TABLESPACE $tbspace_name\) TABLE public\.test1;/,
+ 'reindex specific table on tablespace');
+$node->issues_sql_like(
+ [ 'reindexdb', '-i', 'test1x', 'postgres' ],
+ qr/statement: REINDEX INDEX public\.test1x;/,
+ 'reindex specific index');
+$node->issues_sql_like(
+ [ 'reindexdb', '-S', 'pg_catalog', 'postgres' ],
+ qr/statement: REINDEX SCHEMA pg_catalog;/,
+ 'reindex specific schema');
+$node->issues_sql_like(
+ [ 'reindexdb', '-s', 'postgres' ],
+ qr/statement: REINDEX SYSTEM postgres;/,
+ 'reindex system tables');
+$node->issues_sql_like(
+ [ 'reindexdb', '-v', '-t', 'test1', 'postgres' ],
+ qr/statement: REINDEX \(VERBOSE\) TABLE public\.test1;/,
+ 'reindex with verbose output');
+$node->issues_sql_like(
+ [
+ 'reindexdb', '-v', '-t', 'test1',
+ '--tablespace', $tbspace_name, 'postgres'
+ ],
+ qr/statement: REINDEX \(VERBOSE, TABLESPACE $tbspace_name\) TABLE public\.test1;/,
+ 'reindex with verbose output and tablespace');
+
+# the same with --concurrently
+$node->issues_sql_like(
+ [ 'reindexdb', '--concurrently', 'postgres' ],
+ qr/statement: REINDEX DATABASE CONCURRENTLY postgres;/,
+ 'SQL REINDEX CONCURRENTLY run');
+
+$node->issues_sql_like(
+ [ 'reindexdb', '--concurrently', '-t', 'test1', 'postgres' ],
+ qr/statement: REINDEX TABLE CONCURRENTLY public\.test1;/,
+ 'reindex specific table concurrently');
+$node->issues_sql_like(
+ [ 'reindexdb', '--concurrently', '-i', 'test1x', 'postgres' ],
+ qr/statement: REINDEX INDEX CONCURRENTLY public\.test1x;/,
+ 'reindex specific index concurrently');
+$node->issues_sql_like(
+ [ 'reindexdb', '--concurrently', '-S', 'public', 'postgres' ],
+ qr/statement: REINDEX SCHEMA CONCURRENTLY public;/,
+ 'reindex specific schema concurrently');
+$node->command_fails([ 'reindexdb', '--concurrently', '-s', 'postgres' ],
+ 'reindex system tables concurrently');
+$node->issues_sql_like(
+ [ 'reindexdb', '--concurrently', '-v', '-t', 'test1', 'postgres' ],
+ qr/statement: REINDEX \(VERBOSE\) TABLE CONCURRENTLY public\.test1;/,
+ 'reindex with verbose output concurrently');
+$node->issues_sql_like(
+ [
+ 'reindexdb', '--concurrently', '-v', '-t',
+ 'test1', '--tablespace', $tbspace_name, 'postgres'
+ ],
+ qr/statement: REINDEX \(VERBOSE, TABLESPACE $tbspace_name\) TABLE CONCURRENTLY public\.test1;/,
+ 'reindex concurrently with verbose output and tablespace');
+
+# REINDEX TABLESPACE on toast indexes and tables fails. This is not
+# part of the main regression test suite as these have unpredictable
+# names, and CONCURRENTLY cannot be used in transaction blocks, preventing
+# the use of TRY/CATCH blocks in a custom function to filter error
+# messages.
+$node->command_checks_all(
+ [
+ 'reindexdb', '-t', $toast_table, '--tablespace',
+ $tbspace_name, 'postgres'
+ ],
+ 1,
+ [],
+ [qr/cannot move system relation/],
+ 'reindex toast table with tablespace');
+$node->command_checks_all(
+ [
+ 'reindexdb', '--concurrently', '-t', $toast_table,
+ '--tablespace', $tbspace_name, 'postgres'
+ ],
+ 1,
+ [],
+ [qr/cannot move system relation/],
+ 'reindex toast table concurrently with tablespace');
+$node->command_checks_all(
+ [
+ 'reindexdb', '-i', $toast_index, '--tablespace',
+ $tbspace_name, 'postgres'
+ ],
+ 1,
+ [],
+ [qr/cannot move system relation/],
+ 'reindex toast index with tablespace');
+$node->command_checks_all(
+ [
+ 'reindexdb', '--concurrently', '-i', $toast_index,
+ '--tablespace', $tbspace_name, 'postgres'
+ ],
+ 1,
+ [],
+ [qr/cannot move system relation/],
+ 'reindex toast index concurrently with tablespace');
+
+# connection strings
+$node->command_ok([qw(reindexdb --echo --table=pg_am dbname=template1)],
+ 'reindexdb table with connection string');
+$node->command_ok(
+ [qw(reindexdb --echo dbname=template1)],
+ 'reindexdb database with connection string');
+$node->command_ok(
+ [qw(reindexdb --echo --system dbname=template1)],
+ 'reindexdb system with connection string');
+
+# parallel processing
+$node->safe_psql(
+ 'postgres', q|
+ CREATE SCHEMA s1;
+ CREATE TABLE s1.t1(id integer);
+ CREATE INDEX ON s1.t1(id);
+ CREATE SCHEMA s2;
+ CREATE TABLE s2.t2(id integer);
+ CREATE INDEX ON s2.t2(id);
+ -- empty schema
+ CREATE SCHEMA s3;
+|);
+
+$node->command_fails(
+ [ 'reindexdb', '-j', '2', '-s', 'postgres' ],
+ 'parallel reindexdb cannot process system catalogs');
+$node->command_fails(
+ [ 'reindexdb', '-j', '2', '-i', 'i1', 'postgres' ],
+ 'parallel reindexdb cannot process indexes');
+$node->issues_sql_like(
+ [ 'reindexdb', '-j', '2', 'postgres' ],
+ qr/statement:\ REINDEX SYSTEM postgres;
+.*statement:\ REINDEX TABLE public\.test1/s,
+ 'parallel reindexdb for database issues REINDEX SYSTEM first');
+# Note that the ordering of the commands is not stable, so the second
+# command for s2.t2 is not checked after.
+$node->issues_sql_like(
+ [ 'reindexdb', '-j', '2', '-S', 's1', '-S', 's2', 'postgres' ],
+ qr/statement:\ REINDEX TABLE s1.t1;/,
+ 'parallel reindexdb for schemas does a per-table REINDEX');
+$node->command_ok(
+ [ 'reindexdb', '-j', '2', '-S', 's3' ],
+ 'parallel reindexdb with empty schema');
+$node->command_checks_all(
+ [ 'reindexdb', '-j', '2', '--concurrently', '-d', 'postgres' ],
+ 0,
+ [qr/^$/],
+ [
+ qr/^reindexdb: warning: cannot reindex system catalogs concurrently, skipping all/s
+ ],
+ 'parallel reindexdb for system with --concurrently skips catalogs');
diff --git a/src/bin/scripts/t/091_reindexdb_all.pl b/src/bin/scripts/t/091_reindexdb_all.pl
new file mode 100644
index 0000000..299b198
--- /dev/null
+++ b/src/bin/scripts/t/091_reindexdb_all.pl
@@ -0,0 +1,19 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use Test::More tests => 2;
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$ENV{PGOPTIONS} = '--client-min-messages=WARNING';
+
+$node->issues_sql_like(
+ [ 'reindexdb', '-a' ],
+ qr/statement: REINDEX.*statement: REINDEX/s,
+ 'reindex all databases');
diff --git a/src/bin/scripts/t/100_vacuumdb.pl b/src/bin/scripts/t/100_vacuumdb.pl
new file mode 100644
index 0000000..0addc97
--- /dev/null
+++ b/src/bin/scripts/t/100_vacuumdb.pl
@@ -0,0 +1,148 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 58;
+
+program_help_ok('vacuumdb');
+program_version_ok('vacuumdb');
+program_options_handling_ok('vacuumdb');
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ [ 'vacuumdb', 'postgres' ],
+ qr/statement: VACUUM.*;/,
+ 'SQL VACUUM run');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-f', 'postgres' ],
+ qr/statement: VACUUM \(FULL\).*;/,
+ 'vacuumdb -f');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-F', 'postgres' ],
+ qr/statement: VACUUM \(FREEZE\).*;/,
+ 'vacuumdb -F');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-zj2', 'postgres' ],
+ qr/statement: VACUUM \(ANALYZE\).*;/,
+ 'vacuumdb -zj2');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-Z', 'postgres' ],
+ qr/statement: ANALYZE.*;/,
+ 'vacuumdb -Z');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--disable-page-skipping', 'postgres' ],
+ qr/statement: VACUUM \(DISABLE_PAGE_SKIPPING\).*;/,
+ 'vacuumdb --disable-page-skipping');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--skip-locked', 'postgres' ],
+ qr/statement: VACUUM \(SKIP_LOCKED\).*;/,
+ 'vacuumdb --skip-locked');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--skip-locked', '--analyze-only', 'postgres' ],
+ qr/statement: ANALYZE \(SKIP_LOCKED\).*;/,
+ 'vacuumdb --skip-locked --analyze-only');
+$node->command_fails(
+ [ 'vacuumdb', '--analyze-only', '--disable-page-skipping', 'postgres' ],
+ '--analyze-only and --disable-page-skipping specified together');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--no-index-cleanup', 'postgres' ],
+ qr/statement: VACUUM \(INDEX_CLEANUP FALSE\).*;/,
+ 'vacuumdb --no-index-cleanup');
+$node->command_fails(
+ [ 'vacuumdb', '--analyze-only', '--no-index-cleanup', 'postgres' ],
+ '--analyze-only and --no-index-cleanup specified together');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--no-truncate', 'postgres' ],
+ qr/statement: VACUUM \(TRUNCATE FALSE\).*;/,
+ 'vacuumdb --no-truncate');
+$node->command_fails(
+ [ 'vacuumdb', '--analyze-only', '--no-truncate', 'postgres' ],
+ '--analyze-only and --no-truncate specified together');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--no-process-toast', 'postgres' ],
+ qr/statement: VACUUM \(PROCESS_TOAST FALSE\).*;/,
+ 'vacuumdb --no-process-toast');
+$node->command_fails(
+ [ 'vacuumdb', '--analyze-only', '--no-process-toast', 'postgres' ],
+ '--analyze-only and --no-process-toast specified together');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-P', 2, 'postgres' ],
+ qr/statement: VACUUM \(PARALLEL 2\).*;/,
+ 'vacuumdb -P 2');
+$node->issues_sql_like(
+ [ 'vacuumdb', '-P', 0, 'postgres' ],
+ qr/statement: VACUUM \(PARALLEL 0\).*;/,
+ 'vacuumdb -P 0');
+$node->command_ok([qw(vacuumdb -Z --table=pg_am dbname=template1)],
+ 'vacuumdb with connection string');
+
+$node->command_fails(
+ [qw(vacuumdb -Zt pg_am;ABORT postgres)],
+ 'trailing command in "-t", without COLUMNS');
+
+# Unwanted; better if it failed.
+$node->command_ok(
+ [qw(vacuumdb -Zt pg_am(amname);ABORT postgres)],
+ 'trailing command in "-t", with COLUMNS');
+
+$node->safe_psql(
+ 'postgres', q|
+ CREATE TABLE "need""q(uot" (")x" text);
+ CREATE TABLE vactable (a int, b int);
+ CREATE VIEW vacview AS SELECT 1 as a;
+
+ CREATE FUNCTION f0(int) RETURNS int LANGUAGE SQL AS 'SELECT $1 * $1';
+ CREATE FUNCTION f1(int) RETURNS int LANGUAGE SQL AS 'SELECT f0($1)';
+ CREATE TABLE funcidx (x int);
+ INSERT INTO funcidx VALUES (0),(1),(2),(3);
+ CREATE INDEX i0 ON funcidx ((f1(x)));
+|);
+$node->command_ok([qw|vacuumdb -Z --table="need""q(uot"(")x") postgres|],
+ 'column list');
+$node->command_fails(
+ [qw|vacuumdb -Zt funcidx postgres|],
+ 'unqualifed name via functional index');
+
+$node->command_fails(
+ [ 'vacuumdb', '--analyze', '--table', 'vactable(c)', 'postgres' ],
+ 'incorrect column name with ANALYZE');
+$node->command_fails([ 'vacuumdb', '-P', -1, 'postgres' ],
+ 'negative parallel degree');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--analyze', '--table', 'vactable(a, b)', 'postgres' ],
+ qr/statement: VACUUM \(ANALYZE\) public.vactable\(a, b\);/,
+ 'vacuumdb --analyze with complete column list');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--analyze-only', '--table', 'vactable(b)', 'postgres' ],
+ qr/statement: ANALYZE public.vactable\(b\);/,
+ 'vacuumdb --analyze-only with partial column list');
+$node->command_checks_all(
+ [ 'vacuumdb', '--analyze', '--table', 'vacview', 'postgres' ],
+ 0,
+ [qr/^.*vacuuming database "postgres"/],
+ [qr/^WARNING.*cannot vacuum non-tables or special system tables/s],
+ 'vacuumdb with view');
+$node->command_fails(
+ [ 'vacuumdb', '--table', 'vactable', '--min-mxid-age', '0', 'postgres' ],
+ 'vacuumdb --min-mxid-age with incorrect value');
+$node->command_fails(
+ [ 'vacuumdb', '--table', 'vactable', '--min-xid-age', '0', 'postgres' ],
+ 'vacuumdb --min-xid-age with incorrect value');
+$node->issues_sql_like(
+ [
+ 'vacuumdb', '--table', 'vactable', '--min-mxid-age',
+ '2147483000', 'postgres'
+ ],
+ qr/GREATEST.*relminmxid.*2147483000/,
+ 'vacuumdb --table --min-mxid-age');
+$node->issues_sql_like(
+ [ 'vacuumdb', '--min-xid-age', '2147483001', 'postgres' ],
+ qr/GREATEST.*relfrozenxid.*2147483001/,
+ 'vacuumdb --table --min-xid-age');
diff --git a/src/bin/scripts/t/101_vacuumdb_all.pl b/src/bin/scripts/t/101_vacuumdb_all.pl
new file mode 100644
index 0000000..504f252
--- /dev/null
+++ b/src/bin/scripts/t/101_vacuumdb_all.pl
@@ -0,0 +1,17 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use Test::More tests => 2;
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ [ 'vacuumdb', '-a' ],
+ qr/statement: VACUUM.*statement: VACUUM/s,
+ 'vacuum all databases');
diff --git a/src/bin/scripts/t/102_vacuumdb_stages.pl b/src/bin/scripts/t/102_vacuumdb_stages.pl
new file mode 100644
index 0000000..155c77e
--- /dev/null
+++ b/src/bin/scripts/t/102_vacuumdb_stages.pl
@@ -0,0 +1,38 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use Test::More tests => 4;
+
+my $node = get_new_node('main');
+$node->init;
+$node->start;
+
+$node->issues_sql_like(
+ [ 'vacuumdb', '--analyze-in-stages', 'postgres' ],
+ qr/statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0;
+ .*statement:\ ANALYZE
+ .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay;
+ .*statement:\ ANALYZE
+ .*statement:\ RESET\ default_statistics_target;
+ .*statement:\ ANALYZE/sx,
+ 'analyze three times');
+
+$node->issues_sql_like(
+ [ 'vacuumdb', '--analyze-in-stages', '--all' ],
+ qr/statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0;
+ .*statement:\ ANALYZE
+ .*statement:\ SET\ default_statistics_target=1;\ SET\ vacuum_cost_delay=0;
+ .*statement:\ ANALYZE
+ .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay;
+ .*statement:\ ANALYZE
+ .*statement:\ SET\ default_statistics_target=10;\ RESET\ vacuum_cost_delay;
+ .*statement:\ ANALYZE
+ .*statement:\ RESET\ default_statistics_target;
+ .*statement:\ ANALYZE
+ .*statement:\ RESET\ default_statistics_target;
+ .*statement:\ ANALYZE/sx,
+ 'analyze more than one database in stages');
diff --git a/src/bin/scripts/t/200_connstr.pl b/src/bin/scripts/t/200_connstr.pl
new file mode 100644
index 0000000..b1ceab7
--- /dev/null
+++ b/src/bin/scripts/t/200_connstr.pl
@@ -0,0 +1,42 @@
+
+# Copyright (c) 2021, PostgreSQL Global Development Group
+
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 3;
+
+# Tests to check connection string handling in utilities
+
+# We're going to use byte sequences that aren't valid UTF-8 strings. Use
+# LATIN1, which accepts any byte and has a conversion from each byte to UTF-8.
+$ENV{LC_ALL} = 'C';
+$ENV{PGCLIENTENCODING} = 'LATIN1';
+
+# Create database names covering the range of LATIN1 characters and
+# run the utilities' --all options over them.
+my $dbname1 = generate_ascii_string(1, 63); # contains '='
+my $dbname2 =
+ generate_ascii_string(67, 129); # skip 64-66 to keep length to 62
+my $dbname3 = generate_ascii_string(130, 192);
+my $dbname4 = generate_ascii_string(193, 255);
+
+my $node = get_new_node('main');
+$node->init(extra => [ '--locale=C', '--encoding=LATIN1' ]);
+$node->start;
+
+foreach my $dbname ($dbname1, $dbname2, $dbname3, $dbname4, 'CamelCase')
+{
+ $node->run_log([ 'createdb', $dbname ]);
+}
+
+$node->command_ok(
+ [qw(vacuumdb --all --echo --analyze-only)],
+ 'vacuumdb --all with unusual database names');
+$node->command_ok([qw(reindexdb --all --echo)],
+ 'reindexdb --all with unusual database names');
+$node->command_ok(
+ [qw(clusterdb --all --echo --verbose)],
+ 'clusterdb --all with unusual database names');
diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c
new file mode 100644
index 0000000..a85919c
--- /dev/null
+++ b/src/bin/scripts/vacuumdb.c
@@ -0,0 +1,1062 @@
+/*-------------------------------------------------------------------------
+ *
+ * vacuumdb
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/vacuumdb.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+
+#include "catalog/pg_class_d.h"
+
+#include "common.h"
+#include "common/connect.h"
+#include "common/logging.h"
+#include "fe_utils/cancel.h"
+#include "fe_utils/option_utils.h"
+#include "fe_utils/parallel_slot.h"
+#include "fe_utils/query_utils.h"
+#include "fe_utils/simple_list.h"
+#include "fe_utils/string_utils.h"
+
+
+/* vacuum options controlled by user flags */
+typedef struct vacuumingOptions
+{
+ bool analyze_only;
+ bool verbose;
+ bool and_analyze;
+ bool full;
+ bool freeze;
+ bool disable_page_skipping;
+ bool skip_locked;
+ int min_xid_age;
+ int min_mxid_age;
+ int parallel_workers; /* >= 0 indicates user specified the
+ * parallel degree, otherwise -1 */
+ bool no_index_cleanup;
+ bool force_index_cleanup;
+ bool do_truncate;
+ bool process_toast;
+} vacuumingOptions;
+
+
+static void vacuum_one_database(ConnParams *cparams,
+ vacuumingOptions *vacopts,
+ int stage,
+ SimpleStringList *tables,
+ int concurrentCons,
+ const char *progname, bool echo, bool quiet);
+
+static void vacuum_all_databases(ConnParams *cparams,
+ vacuumingOptions *vacopts,
+ bool analyze_in_stages,
+ int concurrentCons,
+ const char *progname, bool echo, bool quiet);
+
+static void prepare_vacuum_command(PQExpBuffer sql, int serverVersion,
+ vacuumingOptions *vacopts, const char *table);
+
+static void run_vacuum_command(PGconn *conn, const char *sql, bool echo,
+ const char *table);
+
+static void help(const char *progname);
+
+/* For analyze-in-stages mode */
+#define ANALYZE_NO_STAGE -1
+#define ANALYZE_NUM_STAGES 3
+
+
+int
+main(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ {"host", required_argument, NULL, 'h'},
+ {"port", required_argument, NULL, 'p'},
+ {"username", required_argument, NULL, 'U'},
+ {"no-password", no_argument, NULL, 'w'},
+ {"password", no_argument, NULL, 'W'},
+ {"echo", no_argument, NULL, 'e'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"dbname", required_argument, NULL, 'd'},
+ {"analyze", no_argument, NULL, 'z'},
+ {"analyze-only", no_argument, NULL, 'Z'},
+ {"freeze", no_argument, NULL, 'F'},
+ {"all", no_argument, NULL, 'a'},
+ {"table", required_argument, NULL, 't'},
+ {"full", no_argument, NULL, 'f'},
+ {"verbose", no_argument, NULL, 'v'},
+ {"jobs", required_argument, NULL, 'j'},
+ {"parallel", required_argument, NULL, 'P'},
+ {"maintenance-db", required_argument, NULL, 2},
+ {"analyze-in-stages", no_argument, NULL, 3},
+ {"disable-page-skipping", no_argument, NULL, 4},
+ {"skip-locked", no_argument, NULL, 5},
+ {"min-xid-age", required_argument, NULL, 6},
+ {"min-mxid-age", required_argument, NULL, 7},
+ {"no-index-cleanup", no_argument, NULL, 8},
+ {"force-index-cleanup", no_argument, NULL, 9},
+ {"no-truncate", no_argument, NULL, 10},
+ {"no-process-toast", no_argument, NULL, 11},
+ {NULL, 0, NULL, 0}
+ };
+
+ const char *progname;
+ int optindex;
+ int c;
+ const char *dbname = NULL;
+ const char *maintenance_db = NULL;
+ char *host = NULL;
+ char *port = NULL;
+ char *username = NULL;
+ enum trivalue prompt_password = TRI_DEFAULT;
+ ConnParams cparams;
+ bool echo = false;
+ bool quiet = false;
+ vacuumingOptions vacopts;
+ bool analyze_in_stages = false;
+ bool alldb = false;
+ SimpleStringList tables = {NULL, NULL};
+ int concurrentCons = 1;
+ int tbl_count = 0;
+
+ /* initialize options */
+ memset(&vacopts, 0, sizeof(vacopts));
+ vacopts.parallel_workers = -1;
+ vacopts.no_index_cleanup = false;
+ vacopts.force_index_cleanup = false;
+ vacopts.do_truncate = true;
+ vacopts.process_toast = true;
+
+ pg_logging_init(argv[0]);
+ progname = get_progname(argv[0]);
+ set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
+
+ handle_help_version_opts(argc, argv, "vacuumdb", help);
+
+ while ((c = getopt_long(argc, argv, "h:p:U:wWeqd:zZFat:fvj:P:", long_options, &optindex)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ host = pg_strdup(optarg);
+ break;
+ case 'p':
+ port = pg_strdup(optarg);
+ break;
+ case 'U':
+ username = pg_strdup(optarg);
+ break;
+ case 'w':
+ prompt_password = TRI_NO;
+ break;
+ case 'W':
+ prompt_password = TRI_YES;
+ break;
+ case 'e':
+ echo = true;
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 'd':
+ dbname = pg_strdup(optarg);
+ break;
+ case 'z':
+ vacopts.and_analyze = true;
+ break;
+ case 'Z':
+ vacopts.analyze_only = true;
+ break;
+ case 'F':
+ vacopts.freeze = true;
+ break;
+ case 'a':
+ alldb = true;
+ break;
+ case 't':
+ {
+ simple_string_list_append(&tables, optarg);
+ tbl_count++;
+ break;
+ }
+ case 'f':
+ vacopts.full = true;
+ break;
+ case 'v':
+ vacopts.verbose = true;
+ break;
+ case 'j':
+ concurrentCons = atoi(optarg);
+ if (concurrentCons <= 0)
+ {
+ pg_log_error("number of parallel jobs must be at least 1");
+ exit(1);
+ }
+ break;
+ case 'P':
+ vacopts.parallel_workers = atoi(optarg);
+ if (vacopts.parallel_workers < 0)
+ {
+ pg_log_error("parallel workers for vacuum must be greater than or equal to zero");
+ exit(1);
+ }
+ break;
+ case 2:
+ maintenance_db = pg_strdup(optarg);
+ break;
+ case 3:
+ analyze_in_stages = vacopts.analyze_only = true;
+ break;
+ case 4:
+ vacopts.disable_page_skipping = true;
+ break;
+ case 5:
+ vacopts.skip_locked = true;
+ break;
+ case 6:
+ vacopts.min_xid_age = atoi(optarg);
+ if (vacopts.min_xid_age <= 0)
+ {
+ pg_log_error("minimum transaction ID age must be at least 1");
+ exit(1);
+ }
+ break;
+ case 7:
+ vacopts.min_mxid_age = atoi(optarg);
+ if (vacopts.min_mxid_age <= 0)
+ {
+ pg_log_error("minimum multixact ID age must be at least 1");
+ exit(1);
+ }
+ break;
+ case 8:
+ vacopts.no_index_cleanup = true;
+ break;
+ case 9:
+ vacopts.force_index_cleanup = true;
+ break;
+ case 10:
+ vacopts.do_truncate = false;
+ break;
+ case 11:
+ vacopts.process_toast = false;
+ break;
+ default:
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+ }
+
+ /*
+ * Non-option argument specifies database name as long as it wasn't
+ * already specified with -d / --dbname
+ */
+ if (optind < argc && dbname == NULL)
+ {
+ dbname = argv[optind];
+ optind++;
+ }
+
+ if (optind < argc)
+ {
+ pg_log_error("too many command-line arguments (first is \"%s\")",
+ argv[optind]);
+ fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ exit(1);
+ }
+
+ if (vacopts.analyze_only)
+ {
+ if (vacopts.full)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "full");
+ exit(1);
+ }
+ if (vacopts.freeze)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "freeze");
+ exit(1);
+ }
+ if (vacopts.disable_page_skipping)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "disable-page-skipping");
+ exit(1);
+ }
+ if (vacopts.no_index_cleanup)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "no-index-cleanup");
+ exit(1);
+ }
+ if (vacopts.force_index_cleanup)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "force-index-cleanup");
+ exit(1);
+ }
+ if (!vacopts.do_truncate)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "no-truncate");
+ exit(1);
+ }
+ if (!vacopts.process_toast)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "no-process-toast");
+ exit(1);
+ }
+ /* allow 'and_analyze' with 'analyze_only' */
+ }
+
+ /* Prohibit full and analyze_only options with parallel option */
+ if (vacopts.parallel_workers >= 0)
+ {
+ if (vacopts.analyze_only)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing only analyze",
+ "parallel");
+ exit(1);
+ }
+ if (vacopts.full)
+ {
+ pg_log_error("cannot use the \"%s\" option when performing full vacuum",
+ "parallel");
+ exit(1);
+ }
+ }
+
+ /* Prohibit --no-index-cleanup and --force-index-cleanup together */
+ if (vacopts.no_index_cleanup && vacopts.force_index_cleanup)
+ {
+ pg_log_error("cannot use the \"%s\" option with the \"%s\" option",
+ "no-index-cleanup", "force-index-cleanup");
+ exit(1);
+ }
+
+ /* fill cparams except for dbname, which is set below */
+ cparams.pghost = host;
+ cparams.pgport = port;
+ cparams.pguser = username;
+ cparams.prompt_password = prompt_password;
+ cparams.override_dbname = NULL;
+
+ setup_cancel_handler(NULL);
+
+ /* Avoid opening extra connections. */
+ if (tbl_count && (concurrentCons > tbl_count))
+ concurrentCons = tbl_count;
+
+ if (alldb)
+ {
+ if (dbname)
+ {
+ pg_log_error("cannot vacuum all databases and a specific one at the same time");
+ exit(1);
+ }
+ if (tables.head != NULL)
+ {
+ pg_log_error("cannot vacuum specific table(s) in all databases");
+ exit(1);
+ }
+
+ cparams.dbname = maintenance_db;
+
+ vacuum_all_databases(&cparams, &vacopts,
+ analyze_in_stages,
+ concurrentCons,
+ progname, echo, quiet);
+ }
+ else
+ {
+ if (dbname == NULL)
+ {
+ if (getenv("PGDATABASE"))
+ dbname = getenv("PGDATABASE");
+ else if (getenv("PGUSER"))
+ dbname = getenv("PGUSER");
+ else
+ dbname = get_user_name_or_exit(progname);
+ }
+
+ cparams.dbname = dbname;
+
+ if (analyze_in_stages)
+ {
+ int stage;
+
+ for (stage = 0; stage < ANALYZE_NUM_STAGES; stage++)
+ {
+ vacuum_one_database(&cparams, &vacopts,
+ stage,
+ &tables,
+ concurrentCons,
+ progname, echo, quiet);
+ }
+ }
+ else
+ vacuum_one_database(&cparams, &vacopts,
+ ANALYZE_NO_STAGE,
+ &tables,
+ concurrentCons,
+ progname, echo, quiet);
+ }
+
+ exit(0);
+}
+
+/*
+ * vacuum_one_database
+ *
+ * Process tables in the given database. If the 'tables' list is empty,
+ * process all tables in the database.
+ *
+ * Note that this function is only concerned with running exactly one stage
+ * when in analyze-in-stages mode; caller must iterate on us if necessary.
+ *
+ * If concurrentCons is > 1, multiple connections are used to vacuum tables
+ * in parallel. In this case and if the table list is empty, we first obtain
+ * a list of tables from the database.
+ */
+static void
+vacuum_one_database(ConnParams *cparams,
+ vacuumingOptions *vacopts,
+ int stage,
+ SimpleStringList *tables,
+ int concurrentCons,
+ const char *progname, bool echo, bool quiet)
+{
+ PQExpBufferData sql;
+ PQExpBufferData buf;
+ PQExpBufferData catalog_query;
+ PGresult *res;
+ PGconn *conn;
+ SimpleStringListCell *cell;
+ ParallelSlotArray *sa;
+ SimpleStringList dbtables = {NULL, NULL};
+ int i;
+ int ntups;
+ bool failed = false;
+ bool tables_listed = false;
+ bool has_where = false;
+ const char *initcmd;
+ const char *stage_commands[] = {
+ "SET default_statistics_target=1; SET vacuum_cost_delay=0;",
+ "SET default_statistics_target=10; RESET vacuum_cost_delay;",
+ "RESET default_statistics_target;"
+ };
+ const char *stage_messages[] = {
+ gettext_noop("Generating minimal optimizer statistics (1 target)"),
+ gettext_noop("Generating medium optimizer statistics (10 targets)"),
+ gettext_noop("Generating default (full) optimizer statistics")
+ };
+
+ Assert(stage == ANALYZE_NO_STAGE ||
+ (stage >= 0 && stage < ANALYZE_NUM_STAGES));
+
+ conn = connectDatabase(cparams, progname, echo, false, true);
+
+ if (vacopts->disable_page_skipping && PQserverVersion(conn) < 90600)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "disable-page-skipping", "9.6");
+ exit(1);
+ }
+
+ if (vacopts->no_index_cleanup && PQserverVersion(conn) < 120000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "no-index-cleanup", "12");
+ exit(1);
+ }
+
+ if (vacopts->force_index_cleanup && PQserverVersion(conn) < 120000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "force-index-cleanup", "12");
+ exit(1);
+ }
+
+ if (!vacopts->do_truncate && PQserverVersion(conn) < 120000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "no-truncate", "12");
+ exit(1);
+ }
+
+ if (!vacopts->process_toast && PQserverVersion(conn) < 140000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "no-process-toast", "14");
+ exit(1);
+ }
+
+ if (vacopts->skip_locked && PQserverVersion(conn) < 120000)
+ {
+ PQfinish(conn);
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "skip-locked", "12");
+ exit(1);
+ }
+
+ if (vacopts->min_xid_age != 0 && PQserverVersion(conn) < 90600)
+ {
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "--min-xid-age", "9.6");
+ exit(1);
+ }
+
+ if (vacopts->min_mxid_age != 0 && PQserverVersion(conn) < 90600)
+ {
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "--min-mxid-age", "9.6");
+ exit(1);
+ }
+
+ if (vacopts->parallel_workers >= 0 && PQserverVersion(conn) < 130000)
+ {
+ pg_log_error("cannot use the \"%s\" option on server versions older than PostgreSQL %s",
+ "--parallel", "13");
+ exit(1);
+ }
+
+ if (!quiet)
+ {
+ if (stage != ANALYZE_NO_STAGE)
+ printf(_("%s: processing database \"%s\": %s\n"),
+ progname, PQdb(conn), _(stage_messages[stage]));
+ else
+ printf(_("%s: vacuuming database \"%s\"\n"),
+ progname, PQdb(conn));
+ fflush(stdout);
+ }
+
+ /*
+ * Prepare the list of tables to process by querying the catalogs.
+ *
+ * Since we execute the constructed query with the default search_path
+ * (which could be unsafe), everything in this query MUST be fully
+ * qualified.
+ *
+ * First, build a WITH clause for the catalog query if any tables were
+ * specified, with a set of values made of relation names and their
+ * optional set of columns. This is used to match any provided column
+ * lists with the generated qualified identifiers and to filter for the
+ * tables provided via --table. If a listed table does not exist, the
+ * catalog query will fail.
+ */
+ initPQExpBuffer(&catalog_query);
+ for (cell = tables ? tables->head : NULL; cell; cell = cell->next)
+ {
+ char *just_table;
+ const char *just_columns;
+
+ /*
+ * Split relation and column names given by the user, this is used to
+ * feed the CTE with values on which are performed pre-run validity
+ * checks as well. For now these happen only on the relation name.
+ */
+ splitTableColumnsSpec(cell->val, PQclientEncoding(conn),
+ &just_table, &just_columns);
+
+ if (!tables_listed)
+ {
+ appendPQExpBufferStr(&catalog_query,
+ "WITH listed_tables (table_oid, column_list) "
+ "AS (\n VALUES (");
+ tables_listed = true;
+ }
+ else
+ appendPQExpBufferStr(&catalog_query, ",\n (");
+
+ appendStringLiteralConn(&catalog_query, just_table, conn);
+ appendPQExpBufferStr(&catalog_query, "::pg_catalog.regclass, ");
+
+ if (just_columns && just_columns[0] != '\0')
+ appendStringLiteralConn(&catalog_query, just_columns, conn);
+ else
+ appendPQExpBufferStr(&catalog_query, "NULL");
+
+ appendPQExpBufferStr(&catalog_query, "::pg_catalog.text)");
+
+ pg_free(just_table);
+ }
+
+ /* Finish formatting the CTE */
+ if (tables_listed)
+ appendPQExpBufferStr(&catalog_query, "\n)\n");
+
+ appendPQExpBufferStr(&catalog_query, "SELECT c.relname, ns.nspname");
+
+ if (tables_listed)
+ appendPQExpBufferStr(&catalog_query, ", listed_tables.column_list");
+
+ appendPQExpBufferStr(&catalog_query,
+ " FROM pg_catalog.pg_class c\n"
+ " JOIN pg_catalog.pg_namespace ns"
+ " ON c.relnamespace OPERATOR(pg_catalog.=) ns.oid\n"
+ " LEFT JOIN pg_catalog.pg_class t"
+ " ON c.reltoastrelid OPERATOR(pg_catalog.=) t.oid\n");
+
+ /* Used to match the tables listed by the user */
+ if (tables_listed)
+ appendPQExpBufferStr(&catalog_query, " JOIN listed_tables"
+ " ON listed_tables.table_oid OPERATOR(pg_catalog.=) c.oid\n");
+
+ /*
+ * If no tables were listed, filter for the relevant relation types. If
+ * tables were given via --table, don't bother filtering by relation type.
+ * Instead, let the server decide whether a given relation can be
+ * processed in which case the user will know about it.
+ */
+ if (!tables_listed)
+ {
+ appendPQExpBufferStr(&catalog_query, " WHERE c.relkind OPERATOR(pg_catalog.=) ANY (array["
+ CppAsString2(RELKIND_RELATION) ", "
+ CppAsString2(RELKIND_MATVIEW) "])\n");
+ has_where = true;
+ }
+
+ /*
+ * For --min-xid-age and --min-mxid-age, the age of the relation is the
+ * greatest of the ages of the main relation and its associated TOAST
+ * table. The commands generated by vacuumdb will also process the TOAST
+ * table for the relation if necessary, so it does not need to be
+ * considered separately.
+ */
+ if (vacopts->min_xid_age != 0)
+ {
+ appendPQExpBuffer(&catalog_query,
+ " %s GREATEST(pg_catalog.age(c.relfrozenxid),"
+ " pg_catalog.age(t.relfrozenxid)) "
+ " OPERATOR(pg_catalog.>=) '%d'::pg_catalog.int4\n"
+ " AND c.relfrozenxid OPERATOR(pg_catalog.!=)"
+ " '0'::pg_catalog.xid\n",
+ has_where ? "AND" : "WHERE", vacopts->min_xid_age);
+ has_where = true;
+ }
+
+ if (vacopts->min_mxid_age != 0)
+ {
+ appendPQExpBuffer(&catalog_query,
+ " %s GREATEST(pg_catalog.mxid_age(c.relminmxid),"
+ " pg_catalog.mxid_age(t.relminmxid)) OPERATOR(pg_catalog.>=)"
+ " '%d'::pg_catalog.int4\n"
+ " AND c.relminmxid OPERATOR(pg_catalog.!=)"
+ " '0'::pg_catalog.xid\n",
+ has_where ? "AND" : "WHERE", vacopts->min_mxid_age);
+ has_where = true;
+ }
+
+ /*
+ * Execute the catalog query. We use the default search_path for this
+ * query for consistency with table lookups done elsewhere by the user.
+ */
+ appendPQExpBufferStr(&catalog_query, " ORDER BY c.relpages DESC;");
+ executeCommand(conn, "RESET search_path;", echo);
+ res = executeQuery(conn, catalog_query.data, echo);
+ termPQExpBuffer(&catalog_query);
+ PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL, echo));
+
+ /*
+ * If no rows are returned, there are no matching tables, so we are done.
+ */
+ ntups = PQntuples(res);
+ if (ntups == 0)
+ {
+ PQclear(res);
+ PQfinish(conn);
+ return;
+ }
+
+ /*
+ * Build qualified identifiers for each table, including the column list
+ * if given.
+ */
+ initPQExpBuffer(&buf);
+ for (i = 0; i < ntups; i++)
+ {
+ appendPQExpBufferStr(&buf,
+ fmtQualifiedId(PQgetvalue(res, i, 1),
+ PQgetvalue(res, i, 0)));
+
+ if (tables_listed && !PQgetisnull(res, i, 2))
+ appendPQExpBufferStr(&buf, PQgetvalue(res, i, 2));
+
+ simple_string_list_append(&dbtables, buf.data);
+ resetPQExpBuffer(&buf);
+ }
+ termPQExpBuffer(&buf);
+ PQclear(res);
+
+ /*
+ * Ensure concurrentCons is sane. If there are more connections than
+ * vacuumable relations, we don't need to use them all.
+ */
+ if (concurrentCons > ntups)
+ concurrentCons = ntups;
+ if (concurrentCons <= 0)
+ concurrentCons = 1;
+
+ /*
+ * All slots need to be prepared to run the appropriate analyze stage, if
+ * caller requested that mode. We have to prepare the initial connection
+ * ourselves before setting up the slots.
+ */
+ if (stage == ANALYZE_NO_STAGE)
+ initcmd = NULL;
+ else
+ {
+ initcmd = stage_commands[stage];
+ executeCommand(conn, initcmd, echo);
+ }
+
+ /*
+ * Setup the database connections. We reuse the connection we already have
+ * for the first slot. If not in parallel mode, the first slot in the
+ * array contains the connection.
+ */
+ sa = ParallelSlotsSetup(concurrentCons, cparams, progname, echo, initcmd);
+ ParallelSlotsAdoptConn(sa, conn);
+
+ initPQExpBuffer(&sql);
+
+ cell = dbtables.head;
+ do
+ {
+ const char *tabname = cell->val;
+ ParallelSlot *free_slot;
+
+ if (CancelRequested)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ free_slot = ParallelSlotsGetIdle(sa, NULL);
+ if (!free_slot)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ prepare_vacuum_command(&sql, PQserverVersion(free_slot->connection),
+ vacopts, tabname);
+
+ /*
+ * Execute the vacuum. All errors are handled in processQueryResult
+ * through ParallelSlotsGetIdle.
+ */
+ ParallelSlotSetHandler(free_slot, TableCommandResultHandler, NULL);
+ run_vacuum_command(free_slot->connection, sql.data,
+ echo, tabname);
+
+ cell = cell->next;
+ } while (cell != NULL);
+
+ if (!ParallelSlotsWaitCompletion(sa))
+ failed = true;
+
+finish:
+ ParallelSlotsTerminate(sa);
+ pg_free(sa);
+
+ termPQExpBuffer(&sql);
+
+ if (failed)
+ exit(1);
+}
+
+/*
+ * Vacuum/analyze all connectable databases.
+ *
+ * In analyze-in-stages mode, we process all databases in one stage before
+ * moving on to the next stage. That ensure minimal stats are available
+ * quickly everywhere before generating more detailed ones.
+ */
+static void
+vacuum_all_databases(ConnParams *cparams,
+ vacuumingOptions *vacopts,
+ bool analyze_in_stages,
+ int concurrentCons,
+ const char *progname, bool echo, bool quiet)
+{
+ PGconn *conn;
+ PGresult *result;
+ int stage;
+ int i;
+
+ conn = connectMaintenanceDatabase(cparams, progname, echo);
+ result = executeQuery(conn,
+ "SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1;",
+ echo);
+ PQfinish(conn);
+
+ if (analyze_in_stages)
+ {
+ /*
+ * When analyzing all databases in stages, we analyze them all in the
+ * fastest stage first, so that initial statistics become available
+ * for all of them as soon as possible.
+ *
+ * This means we establish several times as many connections, but
+ * that's a secondary consideration.
+ */
+ for (stage = 0; stage < ANALYZE_NUM_STAGES; stage++)
+ {
+ for (i = 0; i < PQntuples(result); i++)
+ {
+ cparams->override_dbname = PQgetvalue(result, i, 0);
+
+ vacuum_one_database(cparams, vacopts,
+ stage,
+ NULL,
+ concurrentCons,
+ progname, echo, quiet);
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < PQntuples(result); i++)
+ {
+ cparams->override_dbname = PQgetvalue(result, i, 0);
+
+ vacuum_one_database(cparams, vacopts,
+ ANALYZE_NO_STAGE,
+ NULL,
+ concurrentCons,
+ progname, echo, quiet);
+ }
+ }
+
+ PQclear(result);
+}
+
+/*
+ * Construct a vacuum/analyze command to run based on the given options, in the
+ * given string buffer, which may contain previous garbage.
+ *
+ * The table name used must be already properly quoted. The command generated
+ * depends on the server version involved and it is semicolon-terminated.
+ */
+static void
+prepare_vacuum_command(PQExpBuffer sql, int serverVersion,
+ vacuumingOptions *vacopts, const char *table)
+{
+ const char *paren = " (";
+ const char *comma = ", ";
+ const char *sep = paren;
+
+ resetPQExpBuffer(sql);
+
+ if (vacopts->analyze_only)
+ {
+ appendPQExpBufferStr(sql, "ANALYZE");
+
+ /* parenthesized grammar of ANALYZE is supported since v11 */
+ if (serverVersion >= 110000)
+ {
+ if (vacopts->skip_locked)
+ {
+ /* SKIP_LOCKED is supported since v12 */
+ Assert(serverVersion >= 120000);
+ appendPQExpBuffer(sql, "%sSKIP_LOCKED", sep);
+ sep = comma;
+ }
+ if (vacopts->verbose)
+ {
+ appendPQExpBuffer(sql, "%sVERBOSE", sep);
+ sep = comma;
+ }
+ if (sep != paren)
+ appendPQExpBufferChar(sql, ')');
+ }
+ else
+ {
+ if (vacopts->verbose)
+ appendPQExpBufferStr(sql, " VERBOSE");
+ }
+ }
+ else
+ {
+ appendPQExpBufferStr(sql, "VACUUM");
+
+ /* parenthesized grammar of VACUUM is supported since v9.0 */
+ if (serverVersion >= 90000)
+ {
+ if (vacopts->disable_page_skipping)
+ {
+ /* DISABLE_PAGE_SKIPPING is supported since v9.6 */
+ Assert(serverVersion >= 90600);
+ appendPQExpBuffer(sql, "%sDISABLE_PAGE_SKIPPING", sep);
+ sep = comma;
+ }
+ if (vacopts->no_index_cleanup)
+ {
+ /* "INDEX_CLEANUP FALSE" has been supported since v12 */
+ Assert(serverVersion >= 120000);
+ Assert(!vacopts->force_index_cleanup);
+ appendPQExpBuffer(sql, "%sINDEX_CLEANUP FALSE", sep);
+ sep = comma;
+ }
+ if (vacopts->force_index_cleanup)
+ {
+ /* "INDEX_CLEANUP TRUE" has been supported since v12 */
+ Assert(serverVersion >= 120000);
+ Assert(!vacopts->no_index_cleanup);
+ appendPQExpBuffer(sql, "%sINDEX_CLEANUP TRUE", sep);
+ sep = comma;
+ }
+ if (!vacopts->do_truncate)
+ {
+ /* TRUNCATE is supported since v12 */
+ Assert(serverVersion >= 120000);
+ appendPQExpBuffer(sql, "%sTRUNCATE FALSE", sep);
+ sep = comma;
+ }
+ if (!vacopts->process_toast)
+ {
+ /* PROCESS_TOAST is supported since v14 */
+ Assert(serverVersion >= 140000);
+ appendPQExpBuffer(sql, "%sPROCESS_TOAST FALSE", sep);
+ sep = comma;
+ }
+ if (vacopts->skip_locked)
+ {
+ /* SKIP_LOCKED is supported since v12 */
+ Assert(serverVersion >= 120000);
+ appendPQExpBuffer(sql, "%sSKIP_LOCKED", sep);
+ sep = comma;
+ }
+ if (vacopts->full)
+ {
+ appendPQExpBuffer(sql, "%sFULL", sep);
+ sep = comma;
+ }
+ if (vacopts->freeze)
+ {
+ appendPQExpBuffer(sql, "%sFREEZE", sep);
+ sep = comma;
+ }
+ if (vacopts->verbose)
+ {
+ appendPQExpBuffer(sql, "%sVERBOSE", sep);
+ sep = comma;
+ }
+ if (vacopts->and_analyze)
+ {
+ appendPQExpBuffer(sql, "%sANALYZE", sep);
+ sep = comma;
+ }
+ if (vacopts->parallel_workers >= 0)
+ {
+ /* PARALLEL is supported since v13 */
+ Assert(serverVersion >= 130000);
+ appendPQExpBuffer(sql, "%sPARALLEL %d", sep,
+ vacopts->parallel_workers);
+ sep = comma;
+ }
+ if (sep != paren)
+ appendPQExpBufferChar(sql, ')');
+ }
+ else
+ {
+ if (vacopts->full)
+ appendPQExpBufferStr(sql, " FULL");
+ if (vacopts->freeze)
+ appendPQExpBufferStr(sql, " FREEZE");
+ if (vacopts->verbose)
+ appendPQExpBufferStr(sql, " VERBOSE");
+ if (vacopts->and_analyze)
+ appendPQExpBufferStr(sql, " ANALYZE");
+ }
+ }
+
+ appendPQExpBuffer(sql, " %s;", table);
+}
+
+/*
+ * Send a vacuum/analyze command to the server, returning after sending the
+ * command.
+ *
+ * Any errors during command execution are reported to stderr.
+ */
+static void
+run_vacuum_command(PGconn *conn, const char *sql, bool echo,
+ const char *table)
+{
+ bool status;
+
+ if (echo)
+ printf("%s\n", sql);
+
+ status = PQsendQuery(conn, sql) == 1;
+
+ if (!status)
+ {
+ if (table)
+ pg_log_error("vacuuming of table \"%s\" in database \"%s\" failed: %s",
+ table, PQdb(conn), PQerrorMessage(conn));
+ else
+ pg_log_error("vacuuming of database \"%s\" failed: %s",
+ PQdb(conn), PQerrorMessage(conn));
+ }
+}
+
+static void
+help(const char *progname)
+{
+ printf(_("%s cleans and analyzes a PostgreSQL database.\n\n"), progname);
+ printf(_("Usage:\n"));
+ printf(_(" %s [OPTION]... [DBNAME]\n"), progname);
+ printf(_("\nOptions:\n"));
+ printf(_(" -a, --all vacuum all databases\n"));
+ printf(_(" -d, --dbname=DBNAME database to vacuum\n"));
+ printf(_(" --disable-page-skipping disable all page-skipping behavior\n"));
+ printf(_(" -e, --echo show the commands being sent to the server\n"));
+ printf(_(" -f, --full do full vacuuming\n"));
+ printf(_(" -F, --freeze freeze row transaction information\n"));
+ printf(_(" --force-index-cleanup always remove index entries that point to dead tuples\n"));
+ printf(_(" -j, --jobs=NUM use this many concurrent connections to vacuum\n"));
+ printf(_(" --min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum\n"));
+ printf(_(" --min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum\n"));
+ printf(_(" --no-index-cleanup don't remove index entries that point to dead tuples\n"));
+ printf(_(" --no-process-toast skip the TOAST table associated with the table to vacuum\n"));
+ printf(_(" --no-truncate don't truncate empty pages at the end of the table\n"));
+ printf(_(" -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"));
+ printf(_(" -q, --quiet don't write any messages\n"));
+ printf(_(" --skip-locked skip relations that cannot be immediately locked\n"));
+ printf(_(" -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"));
+ printf(_(" -v, --verbose write a lot of output\n"));
+ printf(_(" -V, --version output version information, then exit\n"));
+ printf(_(" -z, --analyze update optimizer statistics\n"));
+ printf(_(" -Z, --analyze-only only update optimizer statistics; no vacuum\n"));
+ printf(_(" --analyze-in-stages only update optimizer statistics, in multiple\n"
+ " stages for faster results; no vacuum\n"));
+ printf(_(" -?, --help show this help, then exit\n"));
+ printf(_("\nConnection options:\n"));
+ printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
+ printf(_(" -p, --port=PORT database server port\n"));
+ printf(_(" -U, --username=USERNAME user name to connect as\n"));
+ printf(_(" -w, --no-password never prompt for password\n"));
+ printf(_(" -W, --password force password prompt\n"));
+ printf(_(" --maintenance-db=DBNAME alternate maintenance database\n"));
+ printf(_("\nRead the description of the SQL command VACUUM for details.\n"));
+ printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+}