summaryrefslogtreecommitdiffstats
path: root/src/bin/scripts
diff options
context:
space:
mode:
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.c287
-rw-r--r--src/bin/scripts/common.c478
-rw-r--r--src/bin/scripts/common.h73
-rw-r--r--src/bin/scripts/createdb.c289
-rw-r--r--src/bin/scripts/createuser.c386
-rw-r--r--src/bin/scripts/dropdb.c188
-rw-r--r--src/bin/scripts/dropuser.c187
-rw-r--r--src/bin/scripts/nls.mk14
-rw-r--r--src/bin/scripts/pg_isready.c240
-rw-r--r--src/bin/scripts/po/cs.po1267
-rw-r--r--src/bin/scripts/po/de.po1168
-rw-r--r--src/bin/scripts/po/es.po1160
-rw-r--r--src/bin/scripts/po/fr.po1344
-rw-r--r--src/bin/scripts/po/ja.po1199
-rw-r--r--src/bin/scripts/po/ko.po1199
-rw-r--r--src/bin/scripts/po/pt_BR.po1137
-rw-r--r--src/bin/scripts/po/ru.po1368
-rw-r--r--src/bin/scripts/po/sv.po1138
-rw-r--r--src/bin/scripts/po/tr.po1224
-rw-r--r--src/bin/scripts/po/uk.po1089
-rw-r--r--src/bin/scripts/po/zh_CN.po1086
-rw-r--r--src/bin/scripts/reindexdb.c776
-rw-r--r--src/bin/scripts/scripts_parallel.c284
-rw-r--r--src/bin/scripts/scripts_parallel.h36
-rw-r--r--src/bin/scripts/t/010_clusterdb.pl33
-rw-r--r--src/bin/scripts/t/011_clusterdb_all.pl19
-rw-r--r--src/bin/scripts/t/020_createdb.pl50
-rw-r--r--src/bin/scripts/t/040_createuser.pl34
-rw-r--r--src/bin/scripts/t/050_dropdb.pl29
-rw-r--r--src/bin/scripts/t/070_dropuser.pl23
-rw-r--r--src/bin/scripts/t/080_pg_isready.pl20
-rw-r--r--src/bin/scripts/t/090_reindexdb.pl121
-rw-r--r--src/bin/scripts/t/091_reindexdb_all.pl16
-rw-r--r--src/bin/scripts/t/100_vacuumdb.pl124
-rw-r--r--src/bin/scripts/t/101_vacuumdb_all.pl14
-rw-r--r--src/bin/scripts/t/102_vacuumdb_stages.pl35
-rw-r--r--src/bin/scripts/t/200_connstr.pl39
-rw-r--r--src/bin/scripts/vacuumdb.c944
40 files changed, 19188 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..42bfe47
--- /dev/null
+++ b/src/bin/scripts/Makefile
@@ -0,0 +1,60 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/scripts
+#
+# Portions Copyright (c) 1996-2020, 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 scripts_parallel.o $(WIN32RES) | submake-libpq submake-libpgport submake-libpgfeutils
+reindexdb: reindexdb.o common.o scripts_parallel.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 scripts_parallel.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..2f786e6
--- /dev/null
+++ b/src/bin/scripts/clusterdb.c
@@ -0,0 +1,287 @@
+/*-------------------------------------------------------------------------
+ *
+ * clusterdb
+ *
+ * Portions Copyright (c) 2002-2020, 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/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..d446d7a
--- /dev/null
+++ b/src/bin/scripts/common.c
@@ -0,0 +1,478 @@
+/*-------------------------------------------------------------------------
+ *
+ * common.c
+ * Common support routines for bin/scripts/
+ *
+ *
+ * Portions Copyright (c) 1996-2020, 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 "fe_utils/cancel.h"
+#include "fe_utils/string_utils.h"
+
+#define ERRCODE_UNDEFINED_TABLE "42P01"
+
+#define PQmblenBounded(s, e) strnlen(s, PQmblen(s, e))
+
+/*
+ * Provide strictly harmonized handling of --help and --version
+ * options.
+ */
+void
+handle_help_version_opts(int argc, char *argv[],
+ const char *fixed_progname, help_handler hlp)
+{
+ if (argc > 1)
+ {
+ if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
+ {
+ hlp(get_progname(argv[0]));
+ exit(0);
+ }
+ if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
+ {
+ printf("%s (PostgreSQL) " PG_VERSION "\n", fixed_progname);
+ exit(0);
+ }
+ }
+}
+
+
+/*
+ * Make a database connection with the given parameters.
+ *
+ * An interactive password prompt is automatically issued if needed and
+ * allowed by cparams->prompt_password.
+ *
+ * If allow_password_reuse is true, we will try to re-use any password
+ * given during previous calls to this routine. (Callers should not pass
+ * allow_password_reuse=true unless reconnecting to the same database+user
+ * as before, else we might create password exposure hazards.)
+ */
+PGconn *
+connectDatabase(const ConnParams *cparams, const char *progname,
+ bool echo, bool fail_ok, bool allow_password_reuse)
+{
+ PGconn *conn;
+ bool new_pass;
+ static bool have_password = false;
+ static char password[100];
+
+ /* Callers must supply at least dbname; other params can be NULL */
+ Assert(cparams->dbname);
+
+ if (!allow_password_reuse)
+ have_password = false;
+
+ if (cparams->prompt_password == TRI_YES && !have_password)
+ {
+ simple_prompt("Password: ", password, sizeof(password), false);
+ have_password = true;
+ }
+
+ /*
+ * Start the connection. Loop until we have a password if requested by
+ * backend.
+ */
+ do
+ {
+ const char *keywords[8];
+ const char *values[8];
+ int i = 0;
+
+ /*
+ * If dbname is a connstring, its entries can override the other
+ * values obtained from cparams; but in turn, override_dbname can
+ * override the dbname component of it.
+ */
+ keywords[i] = "host";
+ values[i++] = cparams->pghost;
+ keywords[i] = "port";
+ values[i++] = cparams->pgport;
+ keywords[i] = "user";
+ values[i++] = cparams->pguser;
+ keywords[i] = "password";
+ values[i++] = have_password ? password : NULL;
+ keywords[i] = "dbname";
+ values[i++] = cparams->dbname;
+ if (cparams->override_dbname)
+ {
+ keywords[i] = "dbname";
+ values[i++] = cparams->override_dbname;
+ }
+ keywords[i] = "fallback_application_name";
+ values[i++] = progname;
+ keywords[i] = NULL;
+ values[i++] = NULL;
+ Assert(i <= lengthof(keywords));
+
+ new_pass = false;
+ conn = PQconnectdbParams(keywords, values, true);
+
+ if (!conn)
+ {
+ pg_log_error("could not connect to database %s: out of memory",
+ cparams->dbname);
+ exit(1);
+ }
+
+ /*
+ * No luck? Trying asking (again) for a password.
+ */
+ if (PQstatus(conn) == CONNECTION_BAD &&
+ PQconnectionNeedsPassword(conn) &&
+ cparams->prompt_password != TRI_NO)
+ {
+ PQfinish(conn);
+ simple_prompt("Password: ", password, sizeof(password), false);
+ have_password = true;
+ new_pass = true;
+ }
+ } while (new_pass);
+
+ /* check to see that the backend connection was successfully made */
+ if (PQstatus(conn) == CONNECTION_BAD)
+ {
+ if (fail_ok)
+ {
+ PQfinish(conn);
+ return NULL;
+ }
+ pg_log_error("could not connect to database %s: %s",
+ cparams->dbname, PQerrorMessage(conn));
+ exit(1);
+ }
+
+ /* Start strict; callers may override this. */
+ PQclear(executeQuery(conn, ALWAYS_SECURE_SEARCH_PATH_SQL, echo));
+
+ return conn;
+}
+
+/*
+ * Try to connect to the appropriate maintenance database.
+ *
+ * This differs from connectDatabase only in that it has a rule for
+ * inserting a default "dbname" if none was given (which is why cparams
+ * is not const). Note that cparams->dbname should typically come from
+ * a --maintenance-db command line parameter.
+ */
+PGconn *
+connectMaintenanceDatabase(ConnParams *cparams,
+ const char *progname, bool echo)
+{
+ PGconn *conn;
+
+ /* If a maintenance database name was specified, just connect to it. */
+ if (cparams->dbname)
+ return connectDatabase(cparams, progname, echo, false, false);
+
+ /* Otherwise, try postgres first and then template1. */
+ cparams->dbname = "postgres";
+ conn = connectDatabase(cparams, progname, echo, true, false);
+ if (!conn)
+ {
+ cparams->dbname = "template1";
+ conn = connectDatabase(cparams, progname, echo, false, false);
+ }
+ return conn;
+}
+
+/*
+ * Disconnect the given connection, canceling any statement if one is active.
+ */
+void
+disconnectDatabase(PGconn *conn)
+{
+ char errbuf[256];
+
+ Assert(conn != NULL);
+
+ if (PQtransactionStatus(conn) == PQTRANS_ACTIVE)
+ {
+ PGcancel *cancel;
+
+ if ((cancel = PQgetCancel(conn)))
+ {
+ (void) PQcancel(cancel, errbuf, sizeof(errbuf));
+ PQfreeCancel(cancel);
+ }
+ }
+
+ PQfinish(conn);
+}
+
+/*
+ * Run a query, return the results, exit program on failure.
+ */
+PGresult *
+executeQuery(PGconn *conn, const char *query, bool echo)
+{
+ PGresult *res;
+
+ if (echo)
+ printf("%s\n", query);
+
+ res = PQexec(conn, query);
+ if (!res ||
+ PQresultStatus(res) != PGRES_TUPLES_OK)
+ {
+ pg_log_error("query failed: %s", PQerrorMessage(conn));
+ pg_log_info("query was: %s", query);
+ PQfinish(conn);
+ exit(1);
+ }
+
+ return res;
+}
+
+
+/*
+ * As above for a SQL command (which returns nothing).
+ */
+void
+executeCommand(PGconn *conn, const char *query, bool echo)
+{
+ PGresult *res;
+
+ if (echo)
+ printf("%s\n", query);
+
+ res = PQexec(conn, query);
+ if (!res ||
+ PQresultStatus(res) != PGRES_COMMAND_OK)
+ {
+ pg_log_error("query failed: %s", PQerrorMessage(conn));
+ pg_log_info("query was: %s", query);
+ PQfinish(conn);
+ exit(1);
+ }
+
+ PQclear(res);
+}
+
+
+/*
+ * As above for a SQL maintenance command (returns command success).
+ * Command is executed with a cancel handler set, so Ctrl-C can
+ * interrupt it.
+ */
+bool
+executeMaintenanceCommand(PGconn *conn, const char *query, bool echo)
+{
+ PGresult *res;
+ bool r;
+
+ if (echo)
+ printf("%s\n", query);
+
+ SetCancelConn(conn);
+ res = PQexec(conn, query);
+ ResetCancelConn();
+
+ r = (res && PQresultStatus(res) == PGRES_COMMAND_OK);
+
+ if (res)
+ PQclear(res);
+
+ return r;
+}
+
+/*
+ * Consume all the results generated for the given connection until
+ * nothing remains. If at least one error is encountered, return false.
+ * Note that this will block if the connection is busy.
+ */
+bool
+consumeQueryResult(PGconn *conn)
+{
+ bool ok = true;
+ PGresult *result;
+
+ SetCancelConn(conn);
+ while ((result = PQgetResult(conn)) != NULL)
+ {
+ if (!processQueryResult(conn, result))
+ ok = false;
+ }
+ ResetCancelConn();
+ return ok;
+}
+
+/*
+ * Process (and delete) a query result. Returns true if there's no error,
+ * false otherwise -- but errors about trying to work on a missing relation
+ * are reported and subsequently ignored.
+ */
+bool
+processQueryResult(PGconn *conn, PGresult *result)
+{
+ /*
+ * If it's an error, report it. Errors about a missing table are harmless
+ * so we continue processing; but die for other errors.
+ */
+ if (PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ char *sqlState = PQresultErrorField(result, PG_DIAG_SQLSTATE);
+
+ pg_log_error("processing of database \"%s\" failed: %s",
+ PQdb(conn), PQerrorMessage(conn));
+
+ if (sqlState && strcmp(sqlState, ERRCODE_UNDEFINED_TABLE) != 0)
+ {
+ PQclear(result);
+ return false;
+ }
+ }
+
+ PQclear(result);
+ return true;
+}
+
+
+/*
+ * 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[10];
+
+ simple_prompt(prompt, resp, sizeof(resp), true);
+
+ if (strcmp(resp, _(PG_YESLETTER)) == 0)
+ return true;
+ if (strcmp(resp, _(PG_NOLETTER)) == 0)
+ return false;
+
+ 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..9ec57cd
--- /dev/null
+++ b/src/bin/scripts/common.h
@@ -0,0 +1,73 @@
+/*
+ * common.h
+ * Common support routines for bin/scripts/
+ *
+ * Copyright (c) 2003-2020, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/common.h
+ */
+#ifndef COMMON_H
+#define COMMON_H
+
+#include "common/username.h"
+#include "getopt_long.h" /* pgrminclude ignore */
+#include "libpq-fe.h"
+#include "pqexpbuffer.h" /* pgrminclude ignore */
+
+enum trivalue
+{
+ TRI_DEFAULT,
+ TRI_NO,
+ TRI_YES
+};
+
+/* Parameters needed by connectDatabase/connectMaintenanceDatabase */
+typedef struct _connParams
+{
+ /* These fields record the actual command line parameters */
+ const char *dbname; /* this may be a connstring! */
+ const char *pghost;
+ const char *pgport;
+ const char *pguser;
+ enum trivalue prompt_password;
+ /* If not NULL, this overrides the dbname obtained from command line */
+ /* (but *only* the DB name, not anything else in the connstring) */
+ const char *override_dbname;
+} ConnParams;
+
+typedef void (*help_handler) (const char *progname);
+
+extern void handle_help_version_opts(int argc, char *argv[],
+ const char *fixed_progname,
+ help_handler hlp);
+
+extern PGconn *connectDatabase(const ConnParams *cparams,
+ const char *progname,
+ bool echo, bool fail_ok,
+ bool allow_password_reuse);
+
+extern PGconn *connectMaintenanceDatabase(ConnParams *cparams,
+ const char *progname, bool echo);
+
+extern void disconnectDatabase(PGconn *conn);
+
+extern PGresult *executeQuery(PGconn *conn, const char *query, bool echo);
+
+extern void executeCommand(PGconn *conn, const char *query, bool echo);
+
+extern bool executeMaintenanceCommand(PGconn *conn, const char *query,
+ bool echo);
+
+extern bool consumeQueryResult(PGconn *conn);
+
+extern bool processQueryResult(PGconn *conn, PGresult *result);
+
+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..91e6e21
--- /dev/null
+++ b/src/bin/scripts/createdb.c
@@ -0,0 +1,289 @@
+/*-------------------------------------------------------------------------
+ *
+ * createdb
+ *
+ * Portions Copyright (c) 1996-2020, 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/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..a15d21f
--- /dev/null
+++ b/src/bin/scripts/createuser.c
@@ -0,0 +1,386 @@
+/*-------------------------------------------------------------------------
+ *
+ * createuser
+ *
+ * Portions Copyright (c) 1996-2020, 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 "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;
+ char newuser_buf[128];
+ char newpassword_buf[100];
+
+ /* 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)
+ {
+ simple_prompt("Enter name of role to add: ",
+ newuser_buf, sizeof(newuser_buf), true);
+ newuser = newuser_buf;
+ }
+ else
+ {
+ if (getenv("PGUSER"))
+ newuser = getenv("PGUSER");
+ else
+ newuser = get_user_name_or_exit(progname);
+ }
+ }
+
+ if (pwprompt)
+ {
+ char pw2[100];
+
+ simple_prompt("Enter password for new role: ",
+ newpassword_buf, sizeof(newpassword_buf), false);
+ simple_prompt("Enter it again: ", pw2, sizeof(pw2), false);
+ if (strcmp(newpassword_buf, pw2) != 0)
+ {
+ fprintf(stderr, _("Passwords didn't match.\n"));
+ exit(1);
+ }
+ newpassword = newpassword_buf;
+ }
+
+ 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..ccbf78e
--- /dev/null
+++ b/src/bin/scripts/dropdb.c
@@ -0,0 +1,188 @@
+/*-------------------------------------------------------------------------
+ *
+ * dropdb
+ *
+ * Portions Copyright (c) 1996-2020, 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/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..ef4fe4c
--- /dev/null
+++ b/src/bin/scripts/dropuser.c
@@ -0,0 +1,187 @@
+/*-------------------------------------------------------------------------
+ *
+ * dropuser
+ *
+ * Portions Copyright (c) 1996-2020, 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 "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;
+ char dropuser_buf[128];
+
+ 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)
+ {
+ simple_prompt("Enter name of role to drop: ",
+ dropuser_buf, sizeof(dropuser_buf), true);
+ dropuser = dropuser_buf;
+ }
+ 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..1188e66
--- /dev/null
+++ b/src/bin/scripts/nls.mk
@@ -0,0 +1,14 @@
+# src/bin/scripts/nls.mk
+CATALOG_NAME = pgscripts
+AVAIL_LANGUAGES = cs de es fr ja ko pt_BR 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 \
+ scripts_parallel.c \
+ ../../fe_utils/cancel.c ../../fe_utils/print.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..f397112
--- /dev/null
+++ b/src/bin/scripts/pg_isready.c
@@ -0,0 +1,240 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_isready --- checks the status of the PostgreSQL server
+ *
+ * Copyright (c) 2013-2020, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/pg_isready.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres_fe.h"
+#include "common.h"
+#include "common/logging.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..b59aa29
--- /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: 2020-10-31 21:04+0100\n"
+"Last-Translator: Tomas Vondra <tv@fuzzy.cz>\n"
+"Language-Team: Czech <info@cspug.cx>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"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..31c4dbb
--- /dev/null
+++ b/src/bin/scripts/po/de.po
@@ -0,0 +1,1168 @@
+# German message translation file for "scripts".
+# Peter Eisentraut <peter@eisentraut.org>, 2003 - 2020.
+#
+# Use these quotes: »%s«
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-07-22 03:58+0000\n"
+"PO-Revision-Date: 2021-04-18 21:32+0200\n"
+"Last-Translator: Peter Eisentraut <peter@eisentraut.org>\n"
+"Language-Team: German <pgsql-translators@postgresql.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "Fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "Fehler: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "Warnung: "
+
+#: ../../common/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/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu Zeile)"
+msgstr[1] "(%lu Zeilen)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Unterbrochen\n"
+
+#: ../../fe_utils/print.c:3119
+#, 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:3159
+#, 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:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "ungültiges Ausgabeformat (interner Fehler): %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 "Versuchen Sie »%s --help« für weitere Informationen.\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 "zu viele Kommandozeilenargumente (das erste ist »%s«)"
+
+#: clusterdb.c:146
+#, 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:152
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken clustern"
+
+#: clusterdb.c:218
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Clustern der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: clusterdb.c:221
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "Clustern der Datenbank »%s« fehlgeschlagen: %s"
+
+#: clusterdb.c:249
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: clustere Datenbank »%s«\n"
+
+#: clusterdb.c:265
+#, 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: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 "Aufruf:\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPTION]... [DBNAME]\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"
+"Optionen:\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all clustere alle Datenbanken\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME zu clusternde Datenbank\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 zeige die Befehle, die an den Server\n"
+" gesendet werden\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet unterdrücke alle Mitteilungen\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABELLE clustere nur bestimmte Tabelle(n)\n"
+
+#: clusterdb.c:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose erzeuge viele Meldungen\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 Versionsinformationen anzeigen, dann beenden\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 diese Hilfe anzeigen, dann beenden\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"
+"Verbindungsoptionen:\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 Name des Datenbankservers oder Socket-Verzeichnis\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 des Datenbankservers\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=NAME Datenbankbenutzername\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 niemals nach Passwort fragen\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 Passwortfrage erzwingen\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 alternative Wartungsdatenbank\n"
+
+#: clusterdb.c:284
+#, 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: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"
+"Berichten Sie Fehler an <%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 Homepage: <%s>\n"
+
+#: common.c:82 common.c:140
+msgid "Password: "
+msgstr "Passwort: "
+
+#: common.c:127
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "konnte nicht mit Datenbank %s verbinden: Speicher aufgebraucht"
+
+#: common.c:154
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "konnte nicht mit Datenbank %s verbinden: %s"
+
+#: common.c:233 common.c:258
+#, c-format
+msgid "query failed: %s"
+msgstr "Anfrage fehlgeschlagen: %s"
+
+#: common.c:234 common.c:259
+#, c-format
+msgid "query was: %s"
+msgstr "Anfrage war: %s"
+
+#: common.c:331
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "Verarbeitung der Datenbank »%s« fehlgeschlagen: %s"
+
+#: common.c:425
+#, 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:449
+msgid "y"
+msgstr "j"
+
+#. translator: abbreviation for "no"
+#: common.c:451
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:461
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:475
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "Bitte antworten Sie »%s« oder »%s«.\n"
+
+#: createdb.c:149
+#, 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:154
+#, 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:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "»%s« ist kein gültiger Kodierungsname"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "Erzeugen der Datenbank ist fehlgeschlagen: %s"
+
+#: createdb.c:247
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "Erzeugen des Kommentars ist fehlgeschlagen (Datenbank wurde erzeugt): %s"
+
+#: createdb.c:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s erzeugt eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPTION]... [DBNAME] [BESCHREIBUNG]\n"
+
+#: createdb.c:269
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE Standard-Tablespace der Datenbank\n"
+
+#: createdb.c:270
+#, 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:271
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=KODIERUNG Kodierung für die Datenbank\n"
+
+#: createdb.c:272
+#, 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:273
+#, 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:274
+#, 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:275
+#, 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:276
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE zu kopierende Template-Datenbank\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: createdb.c:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: createdb.c:280
+#, 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:281
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT Port des Datenbankservers\n"
+
+#: createdb.c:282
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NAME Datenbankbenutzername\n"
+
+#: createdb.c:283
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password niemals nach Passwort fragen\n"
+
+#: createdb.c:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password Passwortfrage erzwingen\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME alternative Wartungsdatenbank\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"
+"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:212
+msgid "Enter password for new role: "
+msgstr "Geben Sie das Passwort der neuen Rolle ein: "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Geben Sie es noch einmal ein: "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Passwörter stimmten nicht überein.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "Soll die neue Rolle ein Superuser sein?"
+
+#: createuser.c:240
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Soll die neue Rolle Datenbanken erzeugen dürfen?"
+
+#: createuser.c:248
+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:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "Passwortverschlüsselung ist fehlgeschlagen: %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "Erzeugen der neuen Rolle fehlgeschlagen: %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s erzeugt eine neue PostgreSQL-Rolle.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPTION]... [ROLLENNAME]\n"
+
+#: createuser.c:357
+#, 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:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb Rolle kann neue Datenbanken erzeugen\n"
+
+#: createuser.c:359
+#, 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:361
+#, 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:362
+#, 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:364
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit Rolle erbt keine Privilegien\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login Rolle kann sich anmelden (Voreinstellung)\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login Rolle kann sich nicht anmelden\n"
+
+#: createuser.c:367
+#, 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:368
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole Rolle kann neue Rollen erzeugen\n"
+
+#: createuser.c:369
+#, 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:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser Rolle wird Superuser\n"
+
+#: createuser.c:371
+#, 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:373
+#, 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:375
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication Rolle kann Replikation einleiten\n"
+
+#: createuser.c:376
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication Rolle kann Replikation nicht einleiten\n"
+
+#: createuser.c:381
+#, 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:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "Datenbankname als Argument fehlt"
+
+#: dropdb.c:125
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Datenbank »%s« wird unwiderruflich gelöscht werden.\n"
+
+#: dropdb.c:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "Sind Sie sich sicher?"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "Löschen der Datenbank fehlgeschlagen: %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s löscht eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPTION]... DBNAME\n"
+
+#: dropdb.c:174
+#, 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:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive frage nach, bevor irgendetwas gelöscht wird\n"
+
+#: dropdb.c:177
+#, 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:116
+msgid "Enter name of role to drop: "
+msgstr "Geben Sie den Namen der zu löschenden Rolle ein: "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "Rollenname als Argument fehlt"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Rolle »%s« wird unwiderruflich gelöscht werden.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "Löschen der Rolle »%s« fehlgeschlagen: %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s löscht eine PostgreSQL-Rolle.\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 nachfragen, bevor irgendetwas gelöscht wird, und\n"
+" nach Rollennamen fragen, wenn nicht angegeben\n"
+
+#: dropuser.c:177
+#, 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:182
+#, 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:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "konnte Standardoptionen nicht ermitteln"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "Verbindungen werden angenommen\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "Verbindungen werden abgelehnt\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "keine Antwort\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "kein Verbindungsversuch\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "unbekannt\n"
+
+#: pg_isready.c:223
+#, 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:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPTION]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME Datenbankname\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet weniger ausgeben\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: pg_isready.c:234
+#, 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:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT Port des Datenbankservers\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=SEK Sekunden auf Verbindung warten, 0 schaltet aus (Vorgabe: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NAME Datenbankbenutzername\n"
+
+#: reindexdb.c:152 vacuumdb.c:184
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "Anzahl paralleler Jobs muss mindestens 1 sein"
+
+#: reindexdb.c:202
+#, 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:207
+#, 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:212
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "kann nicht bestimmte Schemas in allen Datenbanken reindizieren"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken reindizieren"
+
+#: reindexdb.c:222
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "kann nicht bestimmte Indexe in allen Datenbanken reindizieren"
+
+#: reindexdb.c:235
+#, 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:240
+#, 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:245
+#, 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:251
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "kann nicht mehrere Jobs verwenden, um Systemkataloge zu reindizieren"
+
+#: reindexdb.c:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "kann nicht mehrere Jobs verwenden, um Indexe zu reindizieren"
+
+#: 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 "Option »%s« kann nicht mit Serverversionen älter als PostgreSQL %s verwendet werden"
+
+#: reindexdb.c:384
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "Systemkataloge können nicht nebenläufig reindiziert werden, werden alle übersprungen"
+
+#: reindexdb.c:564
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "Reindizieren der Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:568
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren des Index »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:572
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren des Schemas »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:576
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "Reindizieren der Systemkataloge in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:580
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Reindizieren der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: reindexdb.c:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindiziere Datenbank »%s«\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s reindiziert eine PostgreSQL-Datenbank.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all alle Datenbanken reindizieren\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently nebenläufig reindizieren\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME zu reindizierende Datenbank\n"
+
+#: reindexdb.c:757
+#, 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:758
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NUM so viele parallele Verbindungen zum\n"
+" Reindizieren verwenden\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system Systemkataloge reindizieren\n"
+
+#: reindexdb.c:761
+#, 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:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABELLE nur bestimmte Tabelle(n) reindizieren\n"
+
+#: reindexdb.c:773
+#, 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"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "zu viele Jobs für diese Plattform -- versuchen Sie %d"
+
+#: vacuumdb.c:192
+#, 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:212
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "minimales Transaktions-ID-Alter muss mindestens 1 sein"
+
+#: vacuumdb.c:220
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "minimales Multixact-ID-Alter muss mindestens 1 sein"
+
+#: 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 "kann Option »%s« nicht verwenden, wenn nur Analyze durchgeführt wird"
+
+#: vacuumdb.c:282
+#, 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:305
+#, 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:310
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "kann nicht bestimmte Tabelle(n) in allen Datenbanken vacuumen"
+
+#: vacuumdb.c:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Erzeuge minimale Optimierer-Statistiken (1 Ziel)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Erzeuge mittlere Optimierer-Statistiken (10 Ziele)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Erzeuge volle Optimierer-Statistiken"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: bearbeite Datenbank »%s«: %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: führe Vacuum in Datenbank »%s« aus\n"
+
+#: vacuumdb.c:899
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "Vacuum der Tabelle »%s« in Datenbank »%s« fehlgeschlagen: %s"
+
+#: vacuumdb.c:902
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "Vacuum der Datenbank »%s« fehlgeschlagen: %s"
+
+#: vacuumdb.c:910
+#, 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:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all führe Vacuum in allen Datenbanken aus\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME führe Vacuum in dieser Datenbank aus\n"
+
+#: vacuumdb.c:916
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping Page-Skipping-Verhalten abschalten\n"
+
+#: vacuumdb.c:917
+#, 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:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full führe volles Vacuum durch\n"
+
+#: vacuumdb.c:919
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze Zeilentransaktionsinformationen einfrieren\n"
+
+#: vacuumdb.c:920
+#, 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:921
+#, 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:922
+#, 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:923
+#, 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:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet unterdrücke alle Mitteilungen\n"
+
+#: vacuumdb.c:925
+#, 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:926
+#, 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:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose erzeuge viele Meldungen\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze aktualisiere Statistiken für den Optimierer\n"
+
+#: vacuumdb.c:930
+#, 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: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 aktualisiere nur Statistiken für den Optimierer,\n"
+" in mehreren Phasen für schnellere Ergebnisse;\n"
+" kein Vacuum\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n"
+
+#: vacuumdb.c:941
+#, 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/es.po b/src/bin/scripts/po/es.po
new file mode 100644
index 0000000..003660e
--- /dev/null
+++ b/src/bin/scripts/po/es.po
@@ -0,0 +1,1160 @@
+# pgscripts spanish translation
+#
+# Copyright (c) 2003-2019, 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
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 10\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-05-13 14:00+0000\n"
+"PO-Revision-Date: 2020-10-16 16:01-0300\n"
+"Last-Translator: Carlos Chapi <carlos.chapi@2ndquadrant.com>\n"
+"Language-Team: PgSQL-es-Ayuda <pgsql-es-ayuda@lists.postgresql.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.0.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 "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:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Petición de cancelación enviada\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "No se pudo enviar el paquete de cancelación: "
+
+#: ../../fe_utils/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu fila)"
+msgstr[1] "(%lu filas)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Interrumpido\n"
+
+#: ../../fe_utils/print.c:3119
+#, 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:3159
+#, 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:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "formato de salida no válido (error interno): %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 "Use «%s --help» para mayor información.\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 "demasiados argumentos en la línea de órdenes (el primero es «%s»)"
+
+#: clusterdb.c:146
+#, 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:152
+#, 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:218
+#, 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:221
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "falló el reordenamiento de la base de datos «%s»: %s"
+
+#: clusterdb.c:249
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: reordenando la base de datos «%s»\n"
+
+#: clusterdb.c:265
+#, 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: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 "Empleo:\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPCIÓN]... [BASE-DE-DATOS]\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"
+"Opciones:\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all reordenar todas las bases de datos\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=BASE base de datos a reordenar\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 mostrar las órdenes a medida que se ejecutan\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet no escribir ningún mensaje\n"
+
+#: clusterdb.c:273
+#, 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:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose desplegar varios mensajes informativos\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 mostrar información de versión y salir\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 mostrar esta ayuda y salir\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"
+"Opciones de conexión:\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=ANFITRIÓN nombre del servidor o directorio del socket\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=PUERTO puerto del servidor\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=USUARIO nombre de usuario para la conexión\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 nunca pedir contraseña\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 forzar la petición de contraseña\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=BASE base de datos de mantención alternativa\n"
+
+#: clusterdb.c:284
+#, 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: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"
+"Reporte errores a <%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 "Sitio web de %s: <%s>\n"
+
+#: common.c:80 common.c:138
+msgid "Password: "
+msgstr "Contraseña: "
+
+#: common.c:125
+#, 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"
+
+#: common.c:152
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "no se pudo conectar a la base de datos %s: %s"
+
+#: common.c:231 common.c:256
+#, c-format
+msgid "query failed: %s"
+msgstr "la consulta falló: %s"
+
+#: common.c:232 common.c:257
+#, c-format
+msgid "query was: %s"
+msgstr "la consulta era: %s"
+
+#: common.c:329
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "falló el procesamiento de la base de datos «%s»: %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] "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:447
+msgid "y"
+msgstr "s"
+
+#. 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 "Por favor conteste «%s» o «%s».\n"
+
+#: createdb.c:149
+#, 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:154
+#, 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:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "«%s» no es un nombre válido de codificación"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "falló la creación de la base de datos: %s"
+
+#: createdb.c:247
+#, 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:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s crea una base de datos PostgreSQL.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPCIÓN]... [NOMBRE] [DESCRIPCIÓN]\n"
+
+#: createdb.c:269
+#, 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:270
+#, 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:271
+#, 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:272
+#, 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:273
+#, 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:274
+#, 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:275
+#, 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:276
+#, 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:277
+#, 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:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: createdb.c:280
+#, 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:281
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PUERTO puerto del servidor\n"
+
+#: createdb.c:282
+#, 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:283
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password nunca pedir contraseña\n"
+
+#: createdb.c:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password forzar la petición de contraseña\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=BASE base de datos de mantención alternativa\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"
+"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:212
+msgid "Enter password for new role: "
+msgstr "Ingrese la contraseña para el nuevo rol: "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Ingrésela nuevamente: "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Las contraseñas no coinciden.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "¿Será el nuevo rol un superusuario?"
+
+#: createuser.c:240
+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:248
+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:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "el cifrado de la contraseña falló: %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "falló la creación del nuevo rol: %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s crea un nuevo rol de PostgreSQL.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPCIÓN]... [ROL]\n"
+
+#: createuser.c:357
+#, 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:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb el rol podrá crear bases de datos\n"
+
+#: createuser.c:359
+#, 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:361
+#, 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:362
+#, 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:364
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit rol no heredará privilegios\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login el rol podrá conectarse (predeterminado)\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login el rol no podrá conectarse\n"
+
+#: createuser.c:367
+#, 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:368
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole el rol podrá crear otros roles\n"
+
+#: createuser.c:369
+#, 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:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser el rol será un superusuario\n"
+
+#: createuser.c:371
+#, 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:373
+#, 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:375
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication el rol podrá iniciar replicación\n"
+
+#: createuser.c:376
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication el rol no podrá iniciar replicación\n"
+
+#: createuser.c:381
+#, 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:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "falta el nombre de base de datos requerido"
+
+#: dropdb.c:125
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "La base de datos «%s» será eliminada permanentemente.\n"
+
+#: dropdb.c:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "¿Está seguro?"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "falló la eliminación de la base de datos: %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s elimina una base de datos de PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPCIÓN]... BASE-DE-DATOS\n"
+
+#: dropdb.c:174
+#, 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:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive preguntar antes de eliminar\n"
+
+#: dropdb.c:177
+#, 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:116
+msgid "Enter name of role to drop: "
+msgstr "Ingrese el nombre del rol a eliminar: "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "falta el nombre de rol requerido"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "El rol «%s» será eliminado permanentemente.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "falló la eliminación del rol «%s»: %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s elimina un rol de PostgreSQL.\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 preguntar antes de eliminar cualquier cosa, y\n"
+" preguntar el nombre de rol si no se especifica\n"
+
+#: dropuser.c:177
+#, 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:182
+#, 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:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "no se pudo extraer las opciones por omisión"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "aceptando conexiones\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "rechazando conexiones\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "sin respuesta\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "sin intentos\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "desconocido\n"
+
+#: pg_isready.c:223
+#, 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:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPCIÓN]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAME nombre de la base de datos\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet ejecutar de forma silenciosa\n"
+
+#: pg_isready.c:230
+#, 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:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: pg_isready.c:234
+#, 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:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PUERTO puerto del servidor\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=SEGUNDOS segundos a esperar al intentar conectarse\n"
+" 0 lo deshabilita (por omisión: %s)\n"
+
+#: pg_isready.c:237
+#, 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:152 vacuumdb.c:184
+#, 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:202
+#, 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:207
+#, 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:212
+#, 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:217
+#, 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:222
+#, 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:235
+#, 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:240
+#, 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:245
+#, 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:251
+#, 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:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "no se pueden usar múltiples procesos para reindexar índices"
+
+#: 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 "no se puede usar la opción «%s» cuando con versiones más antiguas que PostgreSQL %s"
+
+#: reindexdb.c:384
+#, 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:564
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "falló la reindexación de la base de datos «%s»: %s"
+
+#: reindexdb.c:568
+#, 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:572
+#, 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:576
+#, 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:580
+#, 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:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindexando la base de datos «%s»\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s reindexa una base de datos PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all reindexar todas las bases de datos\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently reindexar en modo concurrente\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME base de datos a reindexar\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX recrear sólo este o estos índice(s)\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM usar esta cantidad de conexiones concurrentes\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system reindexa los catálogos del sistema\n"
+
+#: reindexdb.c:761
+#, 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:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE reindexar sólo esta(s) tabla(s)\n"
+
+#: reindexdb.c:773
+#, 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"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "demasiados procesos para esta plataforma -- intente con %d"
+
+#: vacuumdb.c:192
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "el grado de vacuum paralelo debe ser un entero no negativo"
+
+#: vacuumdb.c:212
+#, 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:220
+#, 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:252 vacuumdb.c:258 vacuumdb.c:264 vacuumdb.c:276
+#, 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:282
+#, fuzzy, c-format
+#| msgid "cannot use the \"%s\" option when performing full"
+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:305
+#, 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:310
+#, 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:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Generando estadísticas mínimas para el optimizador (tamaño = 1)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Generando estadísticas medias para el optimizador (tamaño = 10)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Generando estadísticas predeterminadas (completas) para el optimizador"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: procesando la base de datos «%s»: %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: limpiando la base de datos «%s»\n"
+
+#: vacuumdb.c:899
+#, 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:902
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "falló la limpieza de la base de datos «%s»: %s"
+
+#: vacuumdb.c:910
+#, 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:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all limpia todas las bases de datos\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=BASE base de datos a limpiar\n"
+
+#: vacuumdb.c:916
+#, 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:917
+#, 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:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full usar «vacuum full»\n"
+
+#: vacuumdb.c:919
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze usar «vacuum freeze»\n"
+
+#: vacuumdb.c:920
+#, 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:921
+#, 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:922
+#, 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:923
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=GRADO_PARALELISMO use esta cantidad de procesos para vacuum, si están disponibles\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet no desplegar mensajes\n"
+
+#: vacuumdb.c:925
+#, 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:926
+#, 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:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose desplegar varios mensajes informativos\n"
+
+#: vacuumdb.c:928
+#, 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:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze actualizar las estadísticas del optimizador\n"
+
+#: vacuumdb.c:930
+#, 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: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 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:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostrar esta ayuda y salir\n"
+
+#: vacuumdb.c:941
+#, 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"
+
+#~ msgid "Could not send cancel request: %s"
+#~ msgstr "No se pudo enviar el paquete de cancelación: %s"
diff --git a/src/bin/scripts/po/fr.po b/src/bin/scripts/po/fr.po
new file mode 100644
index 0000000..14600e5
--- /dev/null
+++ b/src/bin/scripts/po/fr.po
@@ -0,0 +1,1344 @@
+# 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-05-27 12:00+0000\n"
+"PO-Revision-Date: 2021-05-28 15:24+0200\n"
+"Last-Translator: Guillaume Lelarge <guillaume@lelarge.info>\n"
+"Language-Team: PostgreSQLfr <pgsql-fr-generale@postgresql.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.3\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal : "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "erreur : "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "attention : "
+
+#: ../../common/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 lors de la recherche du nom d'utilisateur : code 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/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu ligne)"
+msgstr[1] "(%lu lignes)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Interrompu\n"
+
+#: ../../fe_utils/print.c:3119
+#, 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:3159
+#, 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:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "format de sortie invalide (erreur interne) : %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 "Essayer « %s --help » pour plus d'informations.\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 "trop d'arguments en ligne de commande (le premier étant « %s »)"
+
+#: clusterdb.c:146
+#, 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:152
+#, 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:218
+#, 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:221
+#, 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:249
+#, 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:265
+#, 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 base\n"
+"de données via la commande CLUSTER.\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 "Usage :\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPTION]... [NOMBASE]\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"
+"Options :\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all réorganise toutes les bases de données\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=NOMBASE base de données à réorganiser\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 affiche les commandes envoyées au serveur\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet n'écrit aucun message\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE réorganise uniquement cette(ces) table(s)\n"
+
+#: clusterdb.c:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mode verbeux\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 affiche la version puis quitte\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 affiche cette aide puis quitte\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"
+"Options de connexion :\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=HOTE hôte du serveur de bases de données ou\n"
+" répertoire des sockets\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 du serveur de bases de données\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=NOMUTILISATEUR nom d'utilisateur pour la connexion\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 empêche la demande d'un mot de passe\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 force la demande d'un mot de passe\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=NOM_BASE indique une autre base par défaut\n"
+
+#: clusterdb.c:284
+#, 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: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"
+"Rapporter les bogues à <%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 "page d'accueil %s : <%s>\n"
+
+#: common.c:80 common.c:138
+msgid "Password: "
+msgstr "Mot de passe : "
+
+#: common.c:125
+#, 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"
+
+#: common.c:152
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "n'a pas pu se connecter à la base de données %s : %s"
+
+#: common.c:231 common.c:256
+#, c-format
+msgid "query failed: %s"
+msgstr "échec de la requête : %s"
+
+#: common.c:232 common.c:257
+#, c-format
+msgid "query was: %s"
+msgstr "la requête était : %s"
+
+#: common.c:329
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "le traitement de la base de données « %s » a échoué : %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] "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:447
+msgid "y"
+msgstr "o"
+
+#. 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 "Merci de répondre « %s » ou « %s ».\n"
+
+#: createdb.c:149
+#, 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:154
+#, 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:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "« %s » n'est pas un nom d'encodage valide"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "la création de la base de données a échoué : %s"
+
+#: createdb.c:247
+#, 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:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s crée une base de données PostgreSQL.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPTION]... [NOMBASE] [DESCRIPTION]\n"
+
+#: createdb.c:269
+#, 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:270
+#, 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:271
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENC encodage de la base de données\n"
+
+#: createdb.c:272
+#, 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\n"
+" données\n"
+
+#: createdb.c:273
+#, 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:274
+#, 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:275
+#, 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:276
+#, 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:277
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: createdb.c:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: createdb.c:280
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=HOTE hôte du serveur de bases de données\n"
+" ou répertoire des sockets\n"
+
+#: createdb.c:281
+#, 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:282
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n"
+
+#: createdb.c:283
+#, 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:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password force la demande d'un mot de passe\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=NOM_BASE indique une autre base par défaut\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"
+"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:212
+msgid "Enter password for new role: "
+msgstr "Saisir le mot de passe pour le nouveau rôle : "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Le saisir de nouveau : "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Les mots de passe ne sont pas identiques.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "Le nouveau rôle est-il super-utilisateur ?"
+
+#: createuser.c:240
+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:248
+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:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "échec du chiffrement du mot de passe : %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "la création du nouvel rôle a échoué : %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s crée un nouvel rôle PostgreSQL.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPTION]... [NOMROLE]\n"
+
+#: createuser.c:357
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N nombre maximal de connexions pour le rôle\n"
+" (par défaut sans limite)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr ""
+" -d, --createdb l'utilisateur peut créer des bases de\n"
+" données\n"
+
+#: createuser.c:359
+#, 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\n"
+" données (par défaut)\n"
+
+#: createuser.c:361
+#, 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:362
+#, 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\n"
+" est membre (par défaut)\n"
+
+#: createuser.c:364
+#, 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:365
+#, 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:366
+#, 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:367
+#, 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:368
+#, 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:369
+#, 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:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser le rôle est super-utilisateur\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser le rôle ne sera pas super-utilisateur (par défaut)\n"
+
+#: createuser.c:373
+#, 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:375
+#, 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:376
+#, 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:381
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=NOMUTILISATEUR nom de l'utilisateur pour la connexion (pas\n"
+" celui à créer)\n"
+
+#: dropdb.c:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "argument nom de la base de données requis mais manquant"
+
+#: dropdb.c:125
+#, 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:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "Êtes-vous sûr ?"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "la suppression de la base de données a échoué : %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s supprime une base de données PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPTION]... NOMBASE\n"
+
+#: dropdb.c:174
+#, 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 supprimer\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr ""
+" -i, --interactive demande confirmation avant de supprimer quoi que\n"
+" ce soit\n"
+
+#: dropdb.c:177
+#, 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:116
+msgid "Enter name of role to drop: "
+msgstr "Saisir le nom du rôle à supprimer : "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "argument nom du rôle requis mais manquant"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Le rôle « %s » sera définitivement supprimé.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "la suppression du rôle « %s » a échoué : %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s supprime un rôle PostgreSQL.\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 demande confirmation avant de supprimer quoi que\n"
+" ce soit, et demande le nom du rôle s'il n'est pas\n"
+" indiqué\n"
+
+#: dropuser.c:177
+#, 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:182
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr ""
+" -U, --username=NOMUTILISATEUR nom de l'utilisateur pour la connexion (pas\n"
+" celui à supprimer)\n"
+
+#: pg_isready.c:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "n'a pas pu récupérer les options par défaut"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "acceptation des connexions\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "rejet des connexions\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "pas de réponse\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "pas de tentative\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "inconnu\n"
+
+#: pg_isready.c:223
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s produitun test de connexion à une base de données PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPTION]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=NOMBASE base de données\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet s'exécute sans affichage\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: pg_isready.c:234
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=NOMHÔTE hôte du serveur de bases de données ou\n"
+" répertoire des sockets\n"
+
+#: pg_isready.c:235
+#, 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:236
+#, 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 de connexion\n"
+" 0 pour désactiver (défaut: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=NOMUTILISATEUR nom d'utilisateur pour la connexion\n"
+
+#: reindexdb.c:152 vacuumdb.c:184
+#, 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:202
+#, 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:207
+#, 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:212
+#, 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:217
+#, 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:222
+#, 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:235
+#, 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:240
+#, 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:245
+#, 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:251
+#, 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:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "ne peut pas utiliser plusieurs jobs pour réindexer les index"
+
+#: 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 "ne peut utiliser l'option « %s » sur des versions serveurs plus anciennes que PostgreSQL %s"
+
+#: reindexdb.c:384
+#, 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:564
+#, 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:568
+#, 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:572
+#, 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:576
+#, 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:580
+#, 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:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s : réindexation de la base de données « %s »\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s réindexe une base de données PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all réindexe toutes les bases de données\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently réindexation en concurrence\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=NOMBASE base de données à réindexer\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX recrée uniquement cet (ces) index\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=NUM utilise ce nombre de connexions concurrentes pour\n"
+" le REINDEX\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system réindexe les catalogues système\n"
+
+#: reindexdb.c:761
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA réindexe seulement le(s) schéma(s) indiqué(s)\n"
+
+#: reindexdb.c:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABLE réindexe uniquement cette (ces) table(s)\n"
+
+#: reindexdb.c:773
+#, 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"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "trop de jobs pour cette plateforme -- tente %d"
+
+#: vacuumdb.c:192
+#, 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:212
+#, 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:220
+#, 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:252 vacuumdb.c:258 vacuumdb.c:264 vacuumdb.c:276
+#, 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:282
+#, 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:305
+#, 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:310
+#, 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:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Génération de statistiques minimales pour l'optimiseur (une cible)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Génération de statistiques moyennes pour l'optimiseur (dix cibles)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Génération de statistiques complètes pour l'optimiseur"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s : traitement de la base de données « %s » %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s : exécution de VACUUM sur la base de données « %s »\n"
+
+#: vacuumdb.c:899
+#, 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:902
+#, 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:910
+#, 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:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr ""
+" -a, --all exécute VACUUM sur toutes les bases de\n"
+" données\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=NOMBASE exécute VACUUM sur cette base de données\n"
+
+#: vacuumdb.c:916
+#, 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:917
+#, 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:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full exécute VACUUM en mode FULL\n"
+
+#: vacuumdb.c:919
+#, 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:920
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr ""
+" -j, --jobs=NUMERO utilise ce nombre de connexions concurrentes pour\n"
+" le 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 âge minimum des identifiants de multitransactions pour les tables à nettoyer\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 âge minimum des identifiants de transactions pour les tables à nettoyer\n"
+
+#: vacuumdb.c:923
+#, c-format
+msgid " -P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLEL_WORKERS utilise ce nombre de processus en tâche de fond pour le VACUUM, si possible\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet n'écrit aucun message\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked ignore les relations qui ne peuvent pas être verrouillées immédiatement\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLONNES)]' exécute VACUUM sur cette (ces) tables\n"
+
+#: vacuumdb.c:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mode verbeux\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version affiche la version puis quitte\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze met à jour les statistiques de l'optimiseur\n"
+
+#: vacuumdb.c:930
+#, 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: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 met seulement à jour les statistiques de\n"
+" l'optimiseur, en plusieurs étapes pour de\n"
+" meilleurs résultats ; pas de VACUUM\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help affiche cette aide puis quitte\n"
+
+#: vacuumdb.c:941
+#, 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 NOMROLE 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=NOMBASE 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=NOMBASE base sur laquelle installer le langage\n"
+
+#~ msgid " %s [OPTION]... LANGNAME [DBNAME]\n"
+#~ msgstr " %s [OPTION]... NOMLANGAGE [NOMBASE]\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 "parallel vacuum degree must be a non-negative integer"
+#~ msgstr "le degré de parallélisation du VACUUM doit être un entier non négatif"
+
+#~ msgid "Could not send cancel request: %s"
+#~ msgstr "N'a pas pu envoyer la requête d'annulation : %s"
diff --git a/src/bin/scripts/po/ja.po b/src/bin/scripts/po/ja.po
new file mode 100644
index 0000000..746593a
--- /dev/null
+++ b/src/bin/scripts/po/ja.po
@@ -0,0 +1,1199 @@
+# Japanese message translation file for scripts
+# Copyright (C) 2019 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: scripts (PostgreSQL 13)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-08-21 15:56+0900\n"
+"PO-Revision-Date: 2020-09-13 08:58+0200\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:241
+#, c-format
+msgid "fatal: "
+msgstr "致命的エラー: "
+
+#: ../../../src/common/logging.c:248
+#, c-format
+msgid "error: "
+msgstr "エラー: "
+
+#: ../../../src/common/logging.c:255
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/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: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: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:3398
+#, 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:239 vacuumdb.c:258
+#, 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:256
+#, 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 "全データベースと特定のデータベースを同時にクラスタ化することはできません"
+
+#: clusterdb.c:149
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "すべてのデータベースの特定のテーブル(群)はクラスタ化できません"
+
+#: clusterdb.c:217
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"のテーブル\"%1$s\"のクラスタ化に失敗しました: %3$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はデータベース内で事前にクラスタ化されているすべてのテーブルをクラスタ化します\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:975
+#, c-format
+msgid "Usage:\n"
+msgstr "使用方法:\n"
+
+#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:976
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [オプション]... [データベース名]\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:977
+#, 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 クラスタ化するデータベース\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=テーブル名 指定したテーブル(群)のみをクラスタ化する\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:1000
+#, 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:1001
+#, 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:1002
+#, 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:1003
+#, 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:1004
+#, 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:1005
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password パスワードプロンプトを強制表示する\n"
+
+#: clusterdb.c:292 dropdb.c:179 reindexdb.c:775 vacuumdb.c:1006
+#, 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"
+"詳細は SQL コマンドの CLUSTER の説明を参照してください。\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:1008
+#, 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:1009
+#, 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] "問い合わせが1行ではなく%d行返しました: %s"
+msgstr[1] "問い合わせが1行ではなく%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 [オプション]... [データベース名] [説明]\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"
+" ディレクトリ\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"
+"デフォルトでは、現在のユーザ名と同名のデータベースが生成されます\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 "追加したいロール名を入力:"
+
+#: 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 "新しいロールをスーパユーザにしますか?"
+
+#: 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 ロールをスーパユーザにする\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"
+
+#: 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=ユーザ名 このユーザとして接続(作成対象ユーザではありません)\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 "実行しますか?"
+
+#: 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 [オプション]... [データベース名]\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=ユーザ名 このユーザとして接続(削除対象ユーザではありません)\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 "unknown\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 [OPTION]...\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=SECS 接続試行時の待機秒数、ゼロで無効化(デフォルト: %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:192
+#, 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:434 vacuumdb.c:442 vacuumdb.c:450 vacuumdb.c:458
+#: vacuumdb.c:465 vacuumdb.c:472 vacuumdb.c:479
+#, c-format
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "PostgreSQL %2$sよりも古いサーバーバージョンでは\"%1$s\"オプションは使えません"
+
+#: reindexdb.c:377
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "システムカタログではインデックスの並行再構築はできません、全てスキップします"
+
+#: 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 "データベース\"%2$s\"中にあるインデックス\"%1$s\"の再作成に失敗しました: %3$s"
+
+#: reindexdb.c:566
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース\"%2$s\"中にあるスキーマ\"%1$s\"のインデックス再構築に失敗しました: %3$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 "データベース\"%2$s\"中にあるテーブル\"%1$s\"のインでックス再構築に失敗しました: %3$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"
+"詳細はSQLコマンドREINDEXに関する説明を参照してください。\n"
+
+#: scripts_parallel.c:234
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "このプラットフォームではジョブ数が多すぎます -- %dで試してください"
+
+#: vacuumdb.c:200
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "並列VACUUMの並列度は非負の整数でなければなりません"
+
+#: vacuumdb.c:220
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "最小トランザクションID差分は1以上でなければなりません"
+
+#: vacuumdb.c:228
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "最小マルチトランザクションID差分は1以上でなくてはなりません"
+
+#: vacuumdb.c:266 vacuumdb.c:272 vacuumdb.c:278 vacuumdb.c:284 vacuumdb.c:290
+#: vacuumdb.c:302
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "analyzeのみを実行する場合\"%s\"は使えません"
+
+#: vacuumdb.c:308
+#, c-format
+msgid "cannot use the \"%s\" option when performing full"
+msgstr "fullを実行する場合\"%s\"オプションは使えません"
+
+#: vacuumdb.c:324
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "全データベースと特定のデータベースを同時にVACUUMすることはできません"
+
+#: vacuumdb.c:329
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "全データベースの特定のテーブル(群)をVACUUMすることはできません"
+
+#: vacuumdb.c:420
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "最適化のための情報を最小限生成します(1対象)"
+
+#: vacuumdb.c:421
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "最適化のための情報を複数生成します(10対象)"
+
+#: vacuumdb.c:422
+msgid "Generating default (full) optimizer statistics"
+msgstr "最適化のための情報をデフォルト数(全て)生成します"
+
+#: vacuumdb.c:487
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: データベース\"%s\"の処理中です: %s\n"
+
+#: vacuumdb.c:490
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: データベース\"%s\"をVACUUMしています\n"
+
+#: vacuumdb.c:963
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "データベース \"%2$s\"のテーブル\"%1$sのVACUUMに失敗しました: %3$s"
+
+#: vacuumdb.c:966
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "データベース\"%s\"のVACUUMに失敗しました: %s"
+
+#: vacuumdb.c:974
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr "%sはPostgreSQLデータベースのゴミ回収および分析を行います。\n"
+
+#: vacuumdb.c:978
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all 全データベースをVACUUM\n"
+
+#: vacuumdb.c:979
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME VACUUMするデータベース名\n"
+
+#: vacuumdb.c:980
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping すべてのページスキップ動作を禁止\n"
+
+#: vacuumdb.c:981
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo サーバに送られるコマンドを表示\n"
+
+#: vacuumdb.c:982
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full VACUUM FULLを実行\n"
+
+#: vacuumdb.c:983
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze 行トランザクション情報を凍結\n"
+
+#: vacuumdb.c:984
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM バキューム時に指定した同時接続数を使用\n"
+
+#: vacuumdb.c:985
+#, 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:986
+#, 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:987
+#, c-format
+msgid " --no-index-cleanup don't remove index entries that point to dead tuples\n"
+msgstr ""
+" --no-index-cleanup デッドタプルを指すインデックスエントリを\n"
+"\t 削除しない\n"
+
+#: vacuumdb.c:988
+#, c-format
+msgid " --no-truncate don't truncate empty pages at the end of the table\n"
+msgstr " --no-truncate テーブル終端の空ページの切り詰めを行わない\n"
+
+#: vacuumdb.c:989
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr ""
+" -P, --parallel=PARALLEL_DEGREE 可能であればこの数のバックグラウンドワーカを\n"
+" VACUUMで使用\n"
+
+#: vacuumdb.c:990
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet メッセージを出力しない\n"
+
+#: vacuumdb.c:991
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked 直ちにロックできなかったリレーションをスキップ\n"
+
+#: vacuumdb.c:992
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLUMNS)]' 指定したテーブル(複数可)のみをVACUUMします\n"
+
+#: vacuumdb.c:993
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 多くのメッセージを出力します\n"
+
+#: vacuumdb.c:994
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version バージョン情報を表示して終了\n"
+
+#: vacuumdb.c:995
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze 最適化用統計情報を更新します\n"
+
+#: vacuumdb.c:996
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only 最適化用統計情報のみ更新; バキュームは行わない\n"
+
+#: vacuumdb.c:997
+#, 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:999
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help このヘルプを表示して終了\n"
+
+#: vacuumdb.c:1007
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"詳細はSQLコマンドのVACUUMの説明を参照してください。\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 "%s: cannot use the \"freeze\" option when performing only analyze\n"
+#~ msgstr "%s: analyze のみを実行する場合 \"freeze\" は使えません\n"
+
+#~ msgid "%s: still %s functions declared in language \"%s\"; language not removed\n"
+#~ msgstr "%s: まだ関数%sが言語\"%s\"内で宣言されています。言語は削除されません\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version バージョン情報を表示して終了\n"
+
+#~ msgid "%s: out of memory\n"
+#~ msgstr "%s: メモリ不足です\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help ヘルプを表示して終了します\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"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version バージョン情報を表示して終了します\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help ヘルプを表示して終了\n"
+
+#~ msgid " --help show this help, then exit\n"
+#~ msgstr " --help ヘルプを表示して終了します\n"
+
+#~ msgid "pg_strdup: cannot duplicate null pointer (internal error)\n"
+#~ msgstr "pg_strdup: nullポインタを複製できません(内部エラー)。\n"
+
+#~ msgid " --version output version information, then exit\n"
+#~ msgstr " --version バージョン情報を表示して終了します\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/pt_BR.po b/src/bin/scripts/po/pt_BR.po
new file mode 100644
index 0000000..07ee7d2
--- /dev/null
+++ b/src/bin/scripts/po/pt_BR.po
@@ -0,0 +1,1137 @@
+# Brazilian Portuguese message translation file for pgscripts
+#
+# Copyright (C) 2003-2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Euler Taveira <euler@eulerto.com>, 2003-2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-05-09 21:38-0300\n"
+"PO-Revision-Date: 2016-06-07 06:54-0400\n"
+"Last-Translator: Euler Taveira <euler@eulerto.com>\n"
+"Language-Team: Brazilian Portuguese <pgsql-translators@postgresql.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n>1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatal: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "erro: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "aviso: "
+
+#: ../../common/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 "sem memória\n"
+
+#: ../../common/fe_memutils.c:92 ../../common/fe_memutils.c:154
+#, c-format
+msgid "cannot duplicate null pointer (internal error)\n"
+msgstr "não pode duplicar ponteiro nulo (erro interno)\n"
+
+#: ../../common/username.c:43
+#, c-format
+msgid "could not look up effective user ID %ld: %s"
+msgstr "não pôde encontrar ID de usuário efetivo %ld: %s"
+
+#: ../../common/username.c:45
+msgid "user does not exist"
+msgstr "usuário não existe"
+
+#: ../../common/username.c:60
+#, c-format
+msgid "user name lookup failure: error code %lu"
+msgstr "falhou ao pesquisar nome de usuário: código de erro %lu"
+
+#: ../../fe_utils/cancel.c:161 ../../fe_utils/cancel.c:206
+msgid "Cancel request sent\n"
+msgstr "Requisição de cancelamento enviada\n"
+
+#: ../../fe_utils/cancel.c:165 ../../fe_utils/cancel.c:210
+msgid "Could not send cancel request: "
+msgstr "Não pôde enviar requisição de cancelamento: "
+
+#: ../../fe_utils/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu registro)"
+msgstr[1] "(%lu registros)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Interrompido\n"
+
+#: ../../fe_utils/print.c:3119
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "Não pode adicionar cabeçalho a conteúdo de tabela: quantidade de colunas %d foi excedida.\n"
+
+#: ../../fe_utils/print.c:3159
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "Não pode adicionar célula a conteúdo de tabela: quantidade total de células %d foi excedida.\n"
+
+#: ../../fe_utils/print.c:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "formato de saída inválido (erro interno): %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 "Tente \"%s --help\" para obter informações adicionais.\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 "muitos argumentos de linha de comando (primeiro é \"%s\")"
+
+#: clusterdb.c:146
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "não pode agrupar todos os bancos de dados e um específico ao mesmo tempo"
+
+#: clusterdb.c:152
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "não pode agrupar tabela(s) específica(s) em todos os bancos de dados"
+
+#: clusterdb.c:218
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "agrupamento da tabela \"%s\" no banco de dados \"%s\" falhou: %s"
+
+#: clusterdb.c:221
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "agrupamento do banco de dados \"%s\" falhou: %s"
+
+#: clusterdb.c:249
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: agrupando banco de dados \"%s\"\n"
+
+#: clusterdb.c:265
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s agrupa todas as tabelas agrupadas anteriormente no banco de dados.\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 "Uso:\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [OPÇÃO]... [NOMEBD]\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"
+"Opções:\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all agrupa todos os bancos de dados\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=NOMEBD banco de dados a ser agrupado\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 mostra os comandos enviados ao servidor\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet não exibe nenhuma mensagem\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABELA agrupa somente a(s) tabela(s) especificada(s)\n"
+
+#: clusterdb.c:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mostra muitas mensagens\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 mostra informação sobre a versão e termina\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 mostra essa ajuda e termina\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"
+"Opções de conexão:\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=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\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=PORTA porta do servidor de banco de dados\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=USUÁRIO nome do usuário para se conectar\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 nunca pergunta senha\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 pergunta senha\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=NOMEBD especifica um banco de dados para manutenção\n"
+
+#: clusterdb.c:284
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Leia a descrição do comando SQL CLUSTER para obter detalhes.\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"
+"Relate erros a <%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 "página web do %s: <%s>\n"
+
+#: common.c:80 common.c:138
+msgid "Password: "
+msgstr "Senha: "
+
+#: common.c:125
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "não pôde conectar ao banco de dados %s: sem memória"
+
+#: common.c:152
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "não pôde conectar ao banco de dados %s: %s"
+
+#: common.c:231 common.c:256
+#, c-format
+msgid "query failed: %s"
+msgstr "consulta falhou: %s"
+
+#: common.c:232 common.c:257
+#, c-format
+msgid "query was: %s"
+msgstr "consulta era: %s"
+
+#: common.c:329
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "processamento do banco de dados \"%s\" falhou: %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] "consulta retornou %d linha ao invés de uma: %s"
+msgstr[1] "consulta retornou %d linhas ao invés de uma: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:447
+msgid "y"
+msgstr "s"
+
+#. 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 "Por favor responda \"%s\" ou \"%s\".\n"
+
+#: createdb.c:149
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "somente uma das opções --locale e --lc-ctype pode ser especificada"
+
+#: createdb.c:154
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "somente uma das opções --locale e --lc-collate pode ser especificada"
+
+#: createdb.c:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" não é um nome de codificação válido"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "criação do banco de dados falhou: %s"
+
+#: createdb.c:247
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "criação de comentário falhou (banco de dados foi criado): %s"
+
+#: createdb.c:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s cria um banco de dados PostgreSQL.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [OPÇÃO]... [NOMEBD] [DESCRIÇÃO]\n"
+
+#: createdb.c:269
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE tablespace padrão para o banco de dados\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo mostra os comandos enviados ao servidor\n"
+
+#: createdb.c:271
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=CODIFICAÇÃO codificação para o banco de dados\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE configurações regionais para o banco de dados\n"
+
+#: createdb.c:273
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE configuração LC_COLLATE para o banco de dados\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE configuração LC_CTYPE para o banco de dados\n"
+
+#: createdb.c:275
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=DONO usuário do banco que será dono do novo banco de dados\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=MODELO modelo de banco de dados para copiar\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostra informação sobre a versão e termina\n"
+
+#: createdb.c:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostra essa ajuda e termina\n"
+
+#: createdb.c:280
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\n"
+
+#: createdb.c:281
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORTA porta do servidor de banco de dados\n"
+
+#: createdb.c:282
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USUÁRIO nome do usuário para se conectar\n"
+
+#: createdb.c:283
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password nunca pergunta senha\n"
+
+#: createdb.c:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password pergunta senha\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=NOMEBD especifica um banco de dados para manutenção\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"
+"Por padrão, um banco de dados com o mesmo nome do usuário é criado.\n"
+
+#: createuser.c:151
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "valor de --connection-limit é inválido: %s"
+
+#: createuser.c:195
+msgid "Enter name of role to add: "
+msgstr "Digite o nome da role a ser adicionada: "
+
+#: createuser.c:212
+msgid "Enter password for new role: "
+msgstr "Digite a senha para a nova role: "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Digite-a novamente: "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Senhas não correspondem.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "A nova role poderá criar um super-usuário?"
+
+#: createuser.c:240
+msgid "Shall the new role be allowed to create databases?"
+msgstr "A nova role poderá criar bancos de dados?"
+
+#: createuser.c:248
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "A nova role poderá criar novas roles?"
+
+#: createuser.c:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "criptografia de senha falhou: %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "criação de nova role falhou: %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s cria uma nova role do PostgreSQL.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [OPÇÃO]... [NOME_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 limite de conexão por role (padrão: ilimitado)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb role pode criar novos bancos de dados\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb role não pode criar novos bancos de dados (padrão)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE nova role será um membro desta 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 herda privilégios de roles das quais ela\n"
+" é um membro (padrão)\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit role não herda privilégios\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login role pode efetuar login (padrão)\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login role não pode efetuar login\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt atribui uma senha a nova role\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole role pode criar novas roles\n"
+
+#: createuser.c:369
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole role não pode criar novas roles (padrão)\n"
+
+#: createuser.c:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser role será super-usuário\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser role não será super-usuário (padrão)\n"
+
+#: createuser.c:373
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive pergunta pelo nome e atributos não informados da role\n"
+" ao invés de utilizar o padrão\n"
+
+#: createuser.c:375
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication role pode iniciar replicação\n"
+
+#: createuser.c:376
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication role não pode iniciar replicação\n"
+
+#: createuser.c:381
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=USUÁRIO nome do usuário para se conectar (não é o usuário a ser criado)\n"
+
+#: dropdb.c:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "nome do banco de dados é um argumento requerido"
+
+#: dropdb.c:125
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Banco de dados \"%s\" será permanentemente removido.\n"
+
+#: dropdb.c:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "remoção do banco de dados falhou: %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s remove um banco de dados PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [OPÇÃO]... NOMEBD]\n"
+
+#: dropdb.c:174
+#, c-format
+msgid " -f, --force try to terminate other connections before dropping\n"
+msgstr " -f, --force tenta terminar outras conexões antes de remover\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive pergunta antes de apagar algo\n"
+
+#: dropdb.c:177
+#, c-format
+msgid " --if-exists don't report error if database doesn't exist\n"
+msgstr " --if-exists não relata erro se banco de dados não existir\n"
+
+#: dropuser.c:116
+msgid "Enter name of role to drop: "
+msgstr "Digite o nome da role a ser removida: "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "nome da role é um argumento requerido"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Role \"%s\" será permanentemente removida.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "remoção da role \"%s\" falhou: %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s remove uma role do PostgreSQL.\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 pergunta antes de apagar algo, e pergunta o nome\n"
+" da role se não for especificado\n"
+
+#: dropuser.c:177
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr " --if-exists não relata erro se usuário não existir\n"
+
+#: dropuser.c:182
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to drop)\n"
+msgstr " -U, --username=USUÁRIO nome do usuário para se conectar (não é o usuário a ser removido)\n"
+
+#: pg_isready.c:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "não pôde obter opções padrão"
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "aceitando conexões\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "rejeitando conexões\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "nenhuma resposta\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "nenhuma tentativa\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "desconhecido\n"
+
+#: pg_isready.c:223
+#, c-format
+msgid ""
+"%s issues a connection check to a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s envia uma verificação de conexão para um banco de dados PostgreSQL.\n"
+"\n"
+
+#: pg_isready.c:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [OPÇÃO]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=NOMEBD nome do banco de dados\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet executa silenciosamente\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostra informação sobre a versão e termina\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostra essa ajuda e termina\n"
+
+#: pg_isready.c:234
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=MÁQUINA máquina do servidor de banco de dados ou diretório do soquete\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORTA porta do servidor de banco de dados\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=SEGS segundos a esperar ao tentar conexão, 0 desabilita (padrão: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USUÁRIO nome do usuário para se conectar\n"
+
+#: reindexdb.c:152 vacuumdb.c:184
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "número de tarefas paralelas deve ser pelo menos 1"
+
+#: reindexdb.c:202
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "não pode reindexar todos os bancos de dados e um específico ao mesmo tempo"
+
+#: reindexdb.c:207
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "não pode reindexar todos os bancos de dados e os catálogos do sistema ao mesmo tempo"
+
+#: reindexdb.c:212
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "não pode reindexar esquema(s) específico(s) em todos os bancos de dados"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "não pode reindexar tabela(s) específica(s) em todos os bancos de dados"
+
+#: reindexdb.c:222
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "não pode reindexar índice(s) específico(s) em todos os bancos de dados"
+
+#: reindexdb.c:235
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "não pode reindexar esquema(s) específico(s) e os catálogos do sistema ao mesmo tempo"
+
+#: reindexdb.c:240
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "não pode reindexar tabela(s) específica(s) e os catálogos do sistema ao mesmo tempo"
+
+#: reindexdb.c:245
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "não pode reindexar índice(s) específico(s) e os catálogos do sistema ao mesmo tempo"
+
+#: reindexdb.c:251
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr "não pode utilizar múltiplas tarefas ao reindexar os catálogos do sistema"
+
+#: reindexdb.c:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "não pode utilizar múltiplas tarefas ao reindexar índices"
+
+#: 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 "não pode utilizar a opção \"%s\" em versões do servidor mais antigas do que PostgreSQL %s"
+
+#: reindexdb.c:384
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "não pode reindexar catálogos do sistemas concorrentemente, ignorando todos"
+
+#: reindexdb.c:564
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "reindexação do banco de dados \"%s\" falhou: %s"
+
+#: reindexdb.c:568
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexação do índice \"%s\" no banco de dados \"%s\" falhou: %s"
+
+#: reindexdb.c:572
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexação do esquema \"%s\" no banco de dados \"%s\" falhou: %s"
+
+#: reindexdb.c:576
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "reindexação de catálogos do sistema no banco de dados \"%s\" falhou: %s"
+
+#: reindexdb.c:580
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "reindexação da tabela \"%s\" no banco de dados \"%s\" falhou: %s"
+
+#: reindexdb.c:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: reindexando banco de dados \"%s\"\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s reindexa um banco de dados PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all reindexa todos os bancos de dados\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently reindexa concorrentemente\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=NOMEBD banco de dados a ser reindexado\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=ÍNDICE reindexa somente índice(s) especificado(s)\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr " -j, --jobs=NUM usa esse número de conexões concorrentes para reindexar\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system reindexa os catálogos do sistema\n"
+
+#: reindexdb.c:761
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=ESQUEMA reindexa somente esquema(s) especificado(s)\n"
+
+#: reindexdb.c:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABELA reindexa somente tabela(s) especificada(s)\n"
+
+#: reindexdb.c:773
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Leia a descrição do comando SQL REINDEX para obter detalhes.\n"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "muitas tarefas para esta plataforma -- tente %d"
+
+#: vacuumdb.c:192
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "grau de paralelismo para limpeza deve ser um inteiro não negativo"
+
+#: vacuumdb.c:212
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "idade mínima do ID de transação deve ser pelo menos 1"
+
+#: vacuumdb.c:220
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "idade mínima do ID de multixact deve ser pelo menos 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 "não pode utilizar a opção \"%s\" ao executar somente analyze"
+
+#: vacuumdb.c:282
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "não pode utilizar a opção \"%s\" ao executar vacuum full"
+
+#: vacuumdb.c:305
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "não pode limpar todos os bancos de dados e um específico ao mesmo tempo"
+
+#: vacuumdb.c:310
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "não pode limpar tabela(s) específica(s) em todos os bancos de dados"
+
+#: vacuumdb.c:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Gerando estatísticas mínimas para otimizador (1 alvo)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Gerando estatísticas parciais para otimizador (10 alvos)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Gerando estatísticas padrão (completa) para otimizador"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: processando banco de dados \"%s\": %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: limpando banco de dados \"%s\"\n"
+
+#: vacuumdb.c:899
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "limpeza na tabela \"%s\" no banco de dados \"%s\" falhou: %s"
+
+#: vacuumdb.c:902
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "limpeza no banco de dados \"%s\" falhou: %s"
+
+#: vacuumdb.c:910
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s limpa e analisa um banco de dados PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all limpa todos bancos de dados\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=NOMEBD banco de dados a ser limpo\n"
+
+#: vacuumdb.c:916
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping desabilita comportamento de ignorar páginas\n"
+
+#: vacuumdb.c:917
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo mostra os comandos enviados ao servidor\n"
+
+#: vacuumdb.c:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full faz uma limpeza completa\n"
+
+#: vacuumdb.c:919
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze congela informação sobre transação de registros\n"
+
+#: vacuumdb.c:920
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM usa esse número de conexões concorrentes para limpar\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=IDADE_MXID idade mínima do ID de multixact das tabelas para limpar\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=IDADE_XID idade mínima do ID de transação das tabelas para limpar\n"
+
+#: vacuumdb.c:923
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=GRAU_PARALELISMO use essa quantidade de processos filho em segundo plano para limpar, se disponível\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet não exibe nenhuma mensagem\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked ignora relações que não podem ser bloqueadas imediatamente\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABELA[(COLUNAS)]' limpa somente tabela(s) específica(s)\n"
+
+#: vacuumdb.c:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose mostra muitas mensagens\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version mostra informação sobre a versão e termina\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze atualiza estatísticas do otimizador\n"
+
+#: vacuumdb.c:930
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only atualiza somente estatísticas do otimizador; sem limpeza\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 atualiza somente estatísticas do otimizador, em\n"
+" múltiplos estágios para resultados mais rápidos; sem limpeza\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help mostra essa ajuda e termina\n"
+
+#: vacuumdb.c:941
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Leia a descrição do comando SQL VACUUM para obter detalhes.\n"
diff --git a/src/bin/scripts/po/ru.po b/src/bin/scripts/po/ru.po
new file mode 100644
index 0000000..6166c32
--- /dev/null
+++ b/src/bin/scripts/po/ru.po
@@ -0,0 +1,1368 @@
+# 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.
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL current)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-11-20 15:13+0300\n"
+"PO-Revision-Date: 2020-09-15 18:56+0300\n"
+"Last-Translator: Alexander Lakhin <exclusion@gmail.com>\n"
+"Language-Team: Russian <pgsql-ru-general@postgresql.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "важно: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "ошибка: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "предупреждение: "
+
+#: ../../common/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: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/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu строка)"
+msgstr[1] "(%lu строки)"
+msgstr[2] "(%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: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 "Для дополнительной информации попробуйте \"%s --help\".\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 "слишком много аргументов командной строки (первый: \"%s\")"
+
+#: clusterdb.c:146
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "нельзя кластеризовать все базы и одну конкретную одновременно"
+
+#: clusterdb.c:152
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "нельзя кластеризовать указанную таблицу(ы) во всех базах"
+
+#: clusterdb.c:218
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "кластеризовать таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: clusterdb.c:221
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "кластеризовать базу \"%s\" не удалось: %s"
+
+#: clusterdb.c:249
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: кластеризация базы \"%s\"\n"
+
+#: clusterdb.c:265
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s упорядочивает данные всех кластеризованных таблиц в базе данных.\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 "Использование:\n"
+
+#: clusterdb.c:267 reindexdb.c:751 vacuumdb.c:912
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД]\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"
+"Параметры:\n"
+
+#: clusterdb.c:269
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all кластеризовать все базы\n"
+
+#: clusterdb.c:270
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=ИМЯ_БД имя базы данных для кластеризации\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 отображать команды, отправляемые серверу\n"
+
+#: clusterdb.c:272 reindexdb.c:759
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не выводить никакие сообщения\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr ""
+" -t, --table=ТАБЛИЦА кластеризовать только указанную таблицу(ы)\n"
+
+#: clusterdb.c:274 reindexdb.c:763
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose выводить исчерпывающие сообщения\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 показать версию и выйти\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 показать эту справку и выйти\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"
+"Параметры подключения:\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=ИМЯ имя сервера баз данных или каталог сокетов\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=ПОРТ порт сервера баз данных\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=ИМЯ имя пользователя для подключения к серверу\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 не запрашивать пароль\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 запросить пароль\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=ИМЯ_БД выбор другой обслуживаемой базы данных\n"
+
+#: clusterdb.c:284
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"Подробнее о кластеризации вы можете узнать в описании SQL-команды 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"
+"Об ошибках сообщайте по адресу <%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: <%s>\n"
+
+#: common.c:80 common.c:138
+msgid "Password: "
+msgstr "Пароль: "
+
+#: common.c:125
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "не удалось подключиться к базе %s (нехватка памяти)"
+
+#: common.c:152
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "не удалось подключиться к базе %s: %s"
+
+#: common.c:231 common.c:256
+#, c-format
+msgid "query failed: %s"
+msgstr "ошибка при выполнении запроса: %s"
+
+#: common.c:232 common.c:257
+#, c-format
+msgid "query was: %s"
+msgstr "запрос: %s"
+
+#: common.c:329
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "ошибка при обработке базы \"%s\": %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] "запрос вернул %d строку вместо одной: %s"
+msgstr[1] "запрос вернул %d строки вместо одной: %s"
+msgstr[2] "запрос вернул %d строк вместо одной: %s"
+
+#. translator: abbreviation for "yes"
+#: common.c:447
+msgid "y"
+msgstr "y"
+
+#. 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 "Пожалуйста, введите \"%s\" или \"%s\".\n"
+
+#: createdb.c:149
+#, c-format
+msgid "only one of --locale and --lc-ctype can be specified"
+msgstr "можно указать только --locale или --lc-ctype"
+
+#: createdb.c:154
+#, c-format
+msgid "only one of --locale and --lc-collate can be specified"
+msgstr "можно указать только --locale и --lc-collate"
+
+#: createdb.c:165
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" не является верным названием кодировки"
+
+#: createdb.c:228
+#, c-format
+msgid "database creation failed: %s"
+msgstr "создать базу данных не удалось: %s"
+
+#: createdb.c:247
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "создать комментарий не удалось (база данных была создана): %s"
+
+#: createdb.c:265
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s создаёт базу данных PostgreSQL.\n"
+"\n"
+
+#: createdb.c:267
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_БД] [ОПИСАНИЕ]\n"
+
+# well-spelled: ПРОСТР
+#: createdb.c:269
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr ""
+" -D, --tablespace=ТАБЛ_ПРОСТР табличное пространство по умолчанию для базы "
+"данных\n"
+
+#: createdb.c:270
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the server\n"
+msgstr ""
+" -e, --echo отображать команды, отправляемые серверу\n"
+
+#: createdb.c:271
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=КОДИРОВКА кодировка базы данных\n"
+
+#: createdb.c:272
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=ЛОКАЛЬ локаль для базы данных\n"
+
+#: createdb.c:273
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для базы данных\n"
+
+#: createdb.c:274
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для базы данных\n"
+
+#: createdb.c:275
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr ""
+" -O, --owner=ВЛАДЕЛЕЦ пользователь-владелец новой базы данных\n"
+
+#: createdb.c:276
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=ШАБЛОН исходная база данных для копирования\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: createdb.c:278
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: createdb.c:280
+#, c-format
+msgid ""
+" -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr ""
+" -h, --host=ИМЯ имя сервера баз данных или каталог сокетов\n"
+
+#: createdb.c:281
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера баз данных\n"
+
+#: createdb.c:282
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для подключения к серверу\n"
+
+#: createdb.c:283
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password не запрашивать пароль\n"
+
+#: createdb.c:284
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password запросить пароль\n"
+
+#: createdb.c:285
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr ""
+" --maintenance-db=ИМЯ_БД выбор другой обслуживаемой базы данных\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"
+"По умолчанию именем базы данных считается имя текущего пользователя.\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:212
+msgid "Enter password for new role: "
+msgstr "Введите пароль для новой роли: "
+
+#: createuser.c:214
+msgid "Enter it again: "
+msgstr "Повторите его: "
+
+#: createuser.c:217
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Пароли не совпадают.\n"
+
+#: createuser.c:225
+msgid "Shall the new role be a superuser?"
+msgstr "Должна ли новая роль иметь полномочия суперпользователя?"
+
+#: createuser.c:240
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Новая роль должна иметь право создавать базы данных?"
+
+#: createuser.c:248
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "Новая роль должна иметь право создавать другие роли?"
+
+#: createuser.c:284
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "ошибка при шифровании пароля: %s"
+
+#: createuser.c:339
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "создать роль не удалось: %s"
+
+#: createuser.c:353
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s создаёт роль пользователя PostgreSQL.\n"
+"\n"
+
+#: createuser.c:355 dropuser.c:171
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [ПАРАМЕТР]... [ИМЯ_РОЛИ]\n"
+
+#: createuser.c:357
+#, c-format
+msgid ""
+" -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr ""
+" -c, --connection-limit=N предел подключений для роли\n"
+" (по умолчанию предела нет)\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb роль с правом создания баз данных\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr ""
+" -D, --no-createdb роль без права создания баз данных (по "
+"умолчанию)\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --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 роль наследует права ролей (групп), в которые "
+"она\n"
+" включена (по умолчанию)\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit роль не наследует права\n"
+
+#: createuser.c:365
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr ""
+" -l, --login роль с правом подключения к серверу (по "
+"умолчанию)\n"
+
+#: createuser.c:366
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login роль без права подключения\n"
+
+#: createuser.c:367
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt назначить пароль новой роли\n"
+
+#: createuser.c:368
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole роль с правом создания других ролей\n"
+
+#: createuser.c:369
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr ""
+" -R, --no-createrole роль без права создания ролей (по умолчанию)\n"
+
+#: createuser.c:370
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser роль с полномочиями суперпользователя\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr ""
+" -S, --no-superuser роль без полномочий суперпользователя (по "
+"умолчанию)\n"
+
+#: createuser.c:373
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes "
+"rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive запрашивать отсутствующие атрибуты и имя роли,\n"
+" а не использовать значения по умолчанию\n"
+
+#: createuser.c:375
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication роль может инициировать репликацию\n"
+
+#: createuser.c:376
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication роль не может инициировать репликацию\n"
+
+#: createuser.c:381
+#, c-format
+msgid ""
+" -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для выполнения операции\n"
+" (но не имя новой роли)\n"
+
+#: dropdb.c:110
+#, c-format
+msgid "missing required argument database name"
+msgstr "отсутствует необходимый аргумент: имя базы данных"
+
+#: dropdb.c:125
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "База данных \"%s\" будет удалена безвозвратно.\n"
+
+#: dropdb.c:126 dropuser.c:131
+msgid "Are you sure?"
+msgstr "Вы уверены? (y/n)"
+
+#: dropdb.c:155
+#, c-format
+msgid "database removal failed: %s"
+msgstr "ошибка при удалении базы данных: %s"
+
+#: dropdb.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s удаляет базу данных PostgreSQL.\n"
+"\n"
+
+#: dropdb.c:171
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [ПАРАМЕТР]... БД\n"
+
+#: dropdb.c:174
+#, c-format
+msgid ""
+" -f, --force try to terminate other connections before "
+"dropping\n"
+msgstr ""
+" -f, --force пытаться закрыть другие подключения перед "
+"удалением\n"
+
+#: dropdb.c:175
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive подтвердить операцию удаления\n"
+
+#: dropdb.c:177
+#, c-format
+msgid ""
+" --if-exists don't report error if database doesn't exist\n"
+msgstr ""
+" --if-exists не считать ошибкой отсутствие базы данных\n"
+
+#: dropuser.c:116
+msgid "Enter name of role to drop: "
+msgstr "Введите имя удаляемой роли: "
+
+#: dropuser.c:122
+#, c-format
+msgid "missing required argument role name"
+msgstr "отсутствует необходимый аргумент: имя роли"
+
+#: dropuser.c:130
+#, c-format
+msgid "Role \"%s\" will be permanently removed.\n"
+msgstr "Роль \"%s\" будет удалена безвозвратно.\n"
+
+#: dropuser.c:154
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "ошибка при удалении роли \"%s\": %s"
+
+#: dropuser.c:169
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s удаляет роль PostgreSQL.\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 подтверждать операцию удаления и запрашивать\n"
+" имя роли, если оно не указано\n"
+
+#: dropuser.c:177
+#, c-format
+msgid " --if-exists don't report error if user doesn't exist\n"
+msgstr ""
+" --if-exists не считать ошибкой отсутствие пользователя\n"
+
+#: dropuser.c:182
+#, 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: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=БД имя базы\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=ИМЯ имя сервера баз данных или каталог сокетов\n"
+
+#: pg_isready.c:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --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=СЕК время ожидания при попытке подключения;\n"
+" 0 - без ограничения (по умолчанию: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr ""
+" -U, --username=ИМЯ имя пользователя для подключения к серверу\n"
+
+#: reindexdb.c:152 vacuumdb.c:184
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "число параллельных заданий должно быть не меньше 1"
+
+#: reindexdb.c:202
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr ""
+"нельзя переиндексировать все базы данных и одну конкретную одновременно"
+
+#: reindexdb.c:207
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать все базы данных и системные каталоги одновременно"
+
+#: reindexdb.c:212
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "нельзя переиндексировать указанную схему(ы) во всех базах"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "нельзя переиндексировать указанную таблицу(ы) во всех базах"
+
+#: reindexdb.c:222
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "нельзя переиндексировать указанный индекс(ы) во всех базах"
+
+#: reindexdb.c:235
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанную схему(ы) и системные каталоги одновременно"
+
+#: reindexdb.c:240
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанную таблицу(ы) и системные каталоги "
+"одновременно"
+
+#: reindexdb.c:245
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr ""
+"нельзя переиндексировать указанный индекс(ы) и системные каталоги "
+"одновременно"
+
+#: reindexdb.c:251
+#, c-format
+msgid "cannot use multiple jobs to reindex system catalogs"
+msgstr ""
+"нельзя задействовать несколько заданий для переиндексирования системных "
+"каталогов"
+
+#: reindexdb.c:280
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "нельзя задействовать несколько заданий для перестроения индексов"
+
+#: 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 ""
+"параметр \"%s\" нельзя использовать с серверами PostgreSQL версии старее %s"
+
+#: reindexdb.c:384
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr ""
+"все системные каталоги пропускаются, так как их нельзя переиндексировать "
+"неблокирующим способом"
+
+#: reindexdb.c:564
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "переиндексировать базу данных \"%s\" не удалось: %s"
+
+#: reindexdb.c:568
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "перестроить индекс \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:572
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "переиндексировать схему \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:576
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "переиндексировать системные каталоги в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:580
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "переиндексировать таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: reindexdb.c:732
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: переиндексация базы данных \"%s\"\n"
+
+#: reindexdb.c:749
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s переиндексирует базу данных PostgreSQL.\n"
+"\n"
+
+#: reindexdb.c:753
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all переиндексировать все базы данных\n"
+
+#: reindexdb.c:754
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently переиндексировать в неблокирующем режиме\n"
+
+#: reindexdb.c:755
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=БД имя базы для переиндексации\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=ИНДЕКС пересоздать только указанный индекс(ы)\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to reindex\n"
+msgstr ""
+" -j, --jobs=ЧИСЛО запускать для переиндексации заданное число "
+"заданий\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system переиндексировать системные каталоги\n"
+
+#: reindexdb.c:761
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr ""
+" -S, --schema=СХЕМА переиндексировать только указанную схему(ы)\n"
+
+#: reindexdb.c:762
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr ""
+" -t, --table=ТАБЛИЦА переиндексировать только указанную таблицу(ы)\n"
+
+#: reindexdb.c:773
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"Подробнее о переиндексации вы можете узнать в описании SQL-команды REINDEX.\n"
+
+#: scripts_parallel.c:232
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "слишком много заданий для этой платформы — попробуйте уменьшить до %d"
+
+#: vacuumdb.c:192
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr ""
+"степень параллельности для очистки должна задаваться неотрицательным целым"
+
+#: vacuumdb.c:212
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "минимальный возраст транзакций должен быть не меньше 1"
+
+#: vacuumdb.c:220
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "минимальный возраст мультитранзакций должен быть не меньше 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 "при выполнении только анализа нельзя использовать параметр \"%s\""
+
+#: vacuumdb.c:282
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "при выполнении полной очистки нельзя использовать параметр \"%s\""
+
+#: vacuumdb.c:305
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "нельзя очистить все базы данных и одну конкретную одновременно"
+
+#: vacuumdb.c:310
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "нельзя очистить только указанную таблицу(ы) во всех базах"
+
+#: vacuumdb.c:400
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Вычисление минимальной статистики для оптимизатора (1 запись)"
+
+#: vacuumdb.c:401
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Вычисление средней статистики для оптимизатора (10 записей)"
+
+#: vacuumdb.c:402
+msgid "Generating default (full) optimizer statistics"
+msgstr "Вычисление стандартной (полной) статистики для оптимизатора"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: обработка базы данных \"%s\": %s\n"
+
+#: vacuumdb.c:453
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: очистка базы данных \"%s\"\n"
+
+#: vacuumdb.c:899
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "очистить таблицу \"%s\" в базе \"%s\" не удалось: %s"
+
+#: vacuumdb.c:902
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "очистить базу данных \"%s\" не удалось: %s"
+
+#: vacuumdb.c:910
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s очищает и анализирует базу данных PostgreSQL.\n"
+"\n"
+
+#: vacuumdb.c:914
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all очистить все базы данных\n"
+
+#: vacuumdb.c:915
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=ИМЯ_БД очистить указанную базу данных\n"
+
+#: vacuumdb.c:916
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr ""
+" --disable-page-skipping исключить все варианты пропуска страниц\n"
+
+#: vacuumdb.c:917
+#, c-format
+msgid ""
+" -e, --echo show the commands being sent to the "
+"server\n"
+msgstr ""
+" -e, --echo отображать команды, отправляемые серверу\n"
+
+#: vacuumdb.c:918
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full произвести полную очистку\n"
+
+#: vacuumdb.c:919
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr ""
+" -F, --freeze заморозить информацию о транзакциях в "
+"строках\n"
+
+#: vacuumdb.c:920
+#, c-format
+msgid ""
+" -j, --jobs=NUM use this many concurrent connections to "
+"vacuum\n"
+msgstr ""
+" -j, --jobs=ЧИСЛО запускать для очистки заданное число "
+"заданий\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=ВОЗРАСТ минимальный возраст мультитранзакций для\n"
+" таблиц, подлежащих очистке\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=ВОЗРАСТ минимальный возраст транзакций для "
+"таблиц,\n"
+" подлежащих очистке\n"
+
+#: vacuumdb.c:923
+#, c-format
+msgid ""
+" -P, --parallel=PARALLEL_DEGREE use this many background workers for "
+"vacuum, if available\n"
+msgstr ""
+" -P, --parallel=СТЕПЕНЬ_ПАРАЛЛЕЛЬНОСТИ\n"
+" по возможности использовать для очистки\n"
+" заданное число фоновых процессов\n"
+
+#: vacuumdb.c:924
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet не выводить сообщения\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid ""
+" --skip-locked skip relations that cannot be immediately "
+"locked\n"
+msgstr ""
+" --skip-locked пропускать отношения, которые не удаётся\n"
+" заблокировать немедленно\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr ""
+" -t, --table='ТАБЛ[(СТОЛБЦЫ)]' очистить только указанную таблицу(ы)\n"
+
+#: vacuumdb.c:927
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose выводить исчерпывающие сообщения\n"
+
+#: vacuumdb.c:928
+#, c-format
+msgid ""
+" -V, --version output version information, then exit\n"
+msgstr " -V, --version показать версию и выйти\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze обновить статистику оптимизатора\n"
+
+#: vacuumdb.c:930
+#, c-format
+msgid ""
+" -Z, --analyze-only only update optimizer statistics; no "
+"vacuum\n"
+msgstr ""
+" -Z, --analyze-only только обновить статистику оптимизатора,\n"
+" не очищать БД\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 только пересчитать статистику для "
+"оптимизатора\n"
+" (в несколько проходов для большей "
+"скорости), без очистки\n"
+
+#: vacuumdb.c:933
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help показать эту справку и выйти\n"
+
+#: vacuumdb.c:941
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command VACUUM for details.\n"
+msgstr ""
+"\n"
+"Подробнее об очистке вы можете узнать в описании SQL-команды VACUUM.\n"
+
+#~ 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..926b1fe
--- /dev/null
+++ b/src/bin/scripts/po/sv.po
@@ -0,0 +1,1138 @@
+# Swedish message translation file for postgresql
+# Dennis Björklund <db@zigo.dhs.org>, 2003, 2004, 2005, 2006, 2017, 2018, 2019, 2020.
+# Peter Eisentraut <peter_e@gmx.net>, 2013.
+# Mats Erik Andersson <bsd@gisladisker.se>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 13\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-09-16 05:16+0000\n"
+"PO-Revision-Date: 2020-09-16 07:56+0200\n"
+"Last-Translator: Dennis Björklund <db@zigo.dhs.org>\n"
+"Language-Team: Swedish <pgsql-translators@postgresql.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:236
+#, c-format
+msgid "fatal: "
+msgstr "fatalt: "
+
+#: ../../../src/common/logging.c:243
+#, c-format
+msgid "error: "
+msgstr "fel: "
+
+#: ../../../src/common/logging.c:250
+#, c-format
+msgid "warning: "
+msgstr "varning: "
+
+#: ../../common/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
+msgid "Could not send cancel request: "
+msgstr "Kunde inte skicka förfrågan om avbrytning: "
+
+#: ../../fe_utils/cancel.c:210
+#, c-format
+msgid "Could not send cancel request: %s"
+msgstr "Kunde inte skicka förfrågan om avbrytning: %s"
+
+#: ../../fe_utils/print.c:350
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu rad)"
+msgstr[1] "(%lu rader)"
+
+#: ../../fe_utils/print.c:3055
+#, c-format
+msgid "Interrupted\n"
+msgstr "Avbruten\n"
+
+#: ../../fe_utils/print.c:3119
+#, 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:3159
+#, 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:3414
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "ogiltigt utdataformat (internt fel): %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 "Försök med \"%s --help\" för mer information.\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 "för många kommandoradsargument (första är \"%s\")"
+
+#: clusterdb.c:143
+#, 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:149
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "kan inte klustra angivna tabeller i alla databaser"
+
+#: clusterdb.c:217
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "klustring av tabell \"%s\" i databas \"%s\" misslyckades: %s"
+
+#: clusterdb.c:220
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "klustring av databas \"%s\" misslyckades: %s"
+
+#: clusterdb.c:253
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: klustring av databas \"%s\"\n"
+
+#: clusterdb.c:274
+#, 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: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 "Användning:\n"
+
+#: clusterdb.c:276 reindexdb.c:754 vacuumdb.c:922
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [FLAGGA]... [DBNAMN]\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"
+"Flaggor:\n"
+
+#: clusterdb.c:278
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all klustra alla databaser\n"
+
+#: clusterdb.c:279
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME databas att klustra\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 visa kommandon som skickas till servern\n"
+
+#: clusterdb.c:281 reindexdb.c:762
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet skriv inte ut några meddelanden\n"
+
+#: clusterdb.c:282
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABELL klustra enbart ingivna tabeller\n"
+
+#: clusterdb.c:283 reindexdb.c:766
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose skriv massor med utdata\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 visa versionsinformation, avsluta sedan\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 visa denna hjälp, avsluta sedan\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"
+"Flaggor för anslutning:\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=VÄRDNAMN databasens värdnamn eller socketkatalog\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 databasserverns 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=ANVÄNDARE användarnamn att ansluta som\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 fråga ej efter lösenord\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 framtvinga fråga om lösenord\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=DBNAMN annat val av underhållsdatabas\n"
+
+#: clusterdb.c:293
+#, 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: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"
+"Rapportera fel till <%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 "hemsida för %s: <%s>\n"
+
+#: common.c:79 common.c:125
+msgid "Password: "
+msgstr "Lösenord: "
+
+#: common.c:112
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "kunde inte ansluta till databas %s: slut på minne"
+
+#: common.c:139
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "kunde inte ansluta till databas %s: %s"
+
+#: common.c:214 common.c:239
+#, c-format
+msgid "query failed: %s"
+msgstr "fråga misslyckades: %s"
+
+#: common.c:215 common.c:240
+#, c-format
+msgid "query was: %s"
+msgstr "frågan var: %s"
+
+#: common.c:312
+#, c-format
+msgid "processing of database \"%s\" failed: %s"
+msgstr "processande av databas \"%s\" misslyckades: %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] "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:430
+msgid "y"
+msgstr "j"
+
+#. 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 "Var vänlig att svara \"%s\" eller \"%s\".\n"
+
+#: createdb.c:148
+#, 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:153
+#, 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:164
+#, c-format
+msgid "\"%s\" is not a valid encoding name"
+msgstr "\"%s\" är inte ett giltigt kodningsnamn"
+
+#: createdb.c:221
+#, c-format
+msgid "database creation failed: %s"
+msgstr "misslyckades att skapa databas: %s"
+
+#: createdb.c:240
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "misslyckades att skapa kommentar (databasen skapades): %s"
+
+#: createdb.c:258
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s skapar en PostgreSQL-databas.\n"
+"\n"
+
+#: createdb.c:260
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [FLAGGA]... [DBNAMN] [BESKRIVNING]\n"
+
+#: createdb.c:262
+#, 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:263
+#, 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:264
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=KODNING teckenkodning för databasen\n"
+
+#: createdb.c:265
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOKAL lokalnamn för databasen\n"
+
+#: createdb.c:266
+#, 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:267
+#, 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:268
+#, 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:269
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=MALL databasmall att kopiera\n"
+
+#: createdb.c:270
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: createdb.c:271
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: createdb.c:273
+#, 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:274
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT databasserverns port\n"
+
+#: createdb.c:275
+#, 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:276
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password fråga ej efter lösenord\n"
+
+#: createdb.c:277
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password framtvinga fråga om lösenord\n"
+
+#: createdb.c:278
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAMN annat val av underhållsdatabas\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"
+"Som standard skapas en databas med samma namn som den nuvarande användares namn.\n"
+
+#: createuser.c:150
+#, c-format
+msgid "invalid value for --connection-limit: %s"
+msgstr "ogiltigt värde till --connection-limit: %s"
+
+#: createuser.c:194
+msgid "Enter name of role to add: "
+msgstr "Mata in namn på den roll som skall läggas till: "
+
+#: createuser.c:211
+msgid "Enter password for new role: "
+msgstr "Mata in lösenord för den nya rollen: "
+
+#: createuser.c:213
+msgid "Enter it again: "
+msgstr "Mata in det igen: "
+
+#: createuser.c:216
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "Lösenorden stämde inte överens.\n"
+
+#: createuser.c:224
+msgid "Shall the new role be a superuser?"
+msgstr "Skall den nya rollen vara en superanvändare?"
+
+#: createuser.c:239
+msgid "Shall the new role be allowed to create databases?"
+msgstr "Skall den nya rollen tillåtas skapa databaser?"
+
+#: createuser.c:247
+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:277
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "misslyckades med lösenordskryptering: %s"
+
+#: createuser.c:332
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "misslyckades med att skapa ny roll: %s"
+
+#: createuser.c:346
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s skapar en ny PostgreSQL-roll.\n"
+"\n"
+
+#: createuser.c:348 dropuser.c:164
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [FLAGGA]... [ROLLNAMN]\n"
+
+#: createuser.c:350
+#, 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:351
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb rollen kan skapa nya databaser\n"
+
+#: createuser.c:352
+#, 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:354
+#, 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:355
+#, 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:357
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit rollen ärver inga rättigheter\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login rollen kan logga in (standard)\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login rollen kan inte logga in\n"
+
+#: createuser.c:360
+#, 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:361
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole rollen kan skapa nya roller\n"
+
+#: createuser.c:362
+#, 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:363
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser rollen blir en superanvändare\n"
+
+#: createuser.c:364
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser rollen blir inte superanvändare (standard)\n"
+
+#: createuser.c:366
+#, 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:368
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication rollen kan starta replikering\n"
+
+#: createuser.c:369
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication rollen får inte starta replikering\n"
+
+#: createuser.c:374
+#, 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:109
+#, c-format
+msgid "missing required argument database name"
+msgstr "saknar nödvändigt databasnamn"
+
+#: dropdb.c:124
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "Databasen \"%s\" kommer att tas bort permanent.\n"
+
+#: dropdb.c:125 dropuser.c:130
+msgid "Are you sure?"
+msgstr "Är du säker?"
+
+#: dropdb.c:149
+#, c-format
+msgid "database removal failed: %s"
+msgstr "borttagning av databas misslyckades: %s"
+
+#: dropdb.c:163
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s tar bort en PostgreSQL-databas.\n"
+"\n"
+
+#: dropdb.c:165
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [FLAGGA]... DBNAMN\n"
+
+#: dropdb.c:168
+#, 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:169
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive fråga innan något tas bort\n"
+
+#: dropdb.c:171
+#, 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:115
+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:147
+#, c-format
+msgid "removal of role \"%s\" failed: %s"
+msgstr "borttagning av rollen \"%s\" misslyckades: %s"
+
+#: dropuser.c:162
+#, c-format
+msgid ""
+"%s removes a PostgreSQL role.\n"
+"\n"
+msgstr "%s tar bort en PostgreSQL-roll.\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 fråga innan något tas bort och fråga efter\n"
+" rollnamn om sådant saknas\n"
+
+#: dropuser.c:170
+#, 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:175
+#, 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:144
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: pg_isready.c:152
+#, c-format
+msgid "could not fetch default options"
+msgstr "kunde inte hämta förvalda värde."
+
+#: pg_isready.c:201
+#, c-format
+msgid "accepting connections\n"
+msgstr "accepterar anslutningar\n"
+
+#: pg_isready.c:204
+#, c-format
+msgid "rejecting connections\n"
+msgstr "vägrar anslutningar\n"
+
+#: pg_isready.c:207
+#, c-format
+msgid "no response\n"
+msgstr "inget svar\n"
+
+#: pg_isready.c:210
+#, c-format
+msgid "no attempt\n"
+msgstr "inget försök\n"
+
+#: pg_isready.c:213
+#, c-format
+msgid "unknown\n"
+msgstr "okänt\n"
+
+#: pg_isready.c:223
+#, 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:225
+#, c-format
+msgid " %s [OPTION]...\n"
+msgstr " %s [FLAGGA]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --dbname=DBNAMN databasens namn\n"
+
+#: pg_isready.c:229
+#, c-format
+msgid " -q, --quiet run quietly\n"
+msgstr " -q, --quiet tyst körning\n"
+
+#: pg_isready.c:230
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: pg_isready.c:231
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: pg_isready.c:234
+#, 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:235
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT databasserverns 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=SEK sekunder att vänta på anslutning; 0 stänger av (förval: %s)\n"
+
+#: pg_isready.c:237
+#, 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:154 vacuumdb.c:186
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "antalet parallella jobb måste vara minst 1"
+
+#: reindexdb.c:197
+#, 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:202
+#, 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:207
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "kan inte omindexera angivna scheman i alla databaser"
+
+#: reindexdb.c:212
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "Kan inte indexera specifik tabell i alla databaser"
+
+#: reindexdb.c:217
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "Kan inte omindexera angivet index i alla databaser"
+
+#: reindexdb.c:229
+#, 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:234
+#, 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:239
+#, 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:245
+#, 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:272
+#, c-format
+msgid "cannot use multiple jobs to reindex indexes"
+msgstr "kan inte använda multipla jobb för att omindexera index"
+
+#: 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 "flaggan \"%s\" kan inte användas på serverversioner äldre än PostgreSQL %s"
+
+#: reindexdb.c:377
+#, c-format
+msgid "cannot reindex system catalogs concurrently, skipping all"
+msgstr "kan inte omindexera systemkataloger parallellt, hoppar över alla"
+
+#: reindexdb.c:558
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "omindexering av databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:562
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av index \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:566
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av schemat \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:570
+#, c-format
+msgid "reindexing of system catalogs in database \"%s\" failed: %s"
+msgstr "omindexering av systemkataloger i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:574
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "omindexering av tabell \"%s\" i databasen \"%s\" misslyckades: %s"
+
+#: reindexdb.c:731
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: omindexering av databasen \"%s\"\n"
+
+#: reindexdb.c:752
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s indexerar om en PostgreSQL-databas.\n"
+"\n"
+
+#: reindexdb.c:756
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all indexera om alla databaser\n"
+
+#: reindexdb.c:757
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently indexer om utan att låsa\n"
+
+#: reindexdb.c:758
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=DBNAME databas att indexera om\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX återskapa enbart angivna index\n"
+
+#: reindexdb.c:761
+#, 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 för omindexering\n"
+
+#: reindexdb.c:763
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system indexera om systemkatalogerna\n"
+
+#: reindexdb.c:764
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA indexera enbart om angivna scheman\n"
+
+#: reindexdb.c:765
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=TABELL indexera endast om angivna tabeller\n"
+
+#: reindexdb.c:776
+#, 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"
+
+#: scripts_parallel.c:234
+#, c-format
+msgid "too many jobs for this platform -- try %d"
+msgstr "för många jobb för denna plattform -- försök med %d"
+
+#: vacuumdb.c:194
+#, c-format
+msgid "parallel vacuum degree must be a non-negative integer"
+msgstr "parallell städningsnivå måste vara ett ickenegativt heltal"
+
+#: vacuumdb.c:214
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "minimal transaktions-ID-ålder måste vara minst 1"
+
+#: vacuumdb.c:222
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "minimal multixact-ID-ålder måste vara minst 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 "flaggan \"%s\" kan inte användas vid enbart analys"
+
+#: vacuumdb.c:284
+#, c-format
+msgid "cannot use the \"%s\" option when performing full vacuum"
+msgstr "flaggan \"%s\" kan inte användas vid \"full vacuum\""
+
+#: vacuumdb.c:300
+#, 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:305
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "kan inte städa en specifik tabell i alla databaser."
+
+#: vacuumdb.c:396
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "Skapar minimal optimeringsstatistik (1 mål)"
+
+#: vacuumdb.c:397
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "Skapar medium optimeringsstatistik (10 mål)"
+
+#: vacuumdb.c:398
+msgid "Generating default (full) optimizer statistics"
+msgstr "Skapar förvald (full) optimeringsstatistik"
+
+#: vacuumdb.c:447
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s: processar databasen \"%s\": %s\n"
+
+#: vacuumdb.c:450
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: städar databasen \"%s\".\n"
+
+#: vacuumdb.c:909
+#, 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:912
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "städning av databasen \"%s\" misslyckades: %s"
+
+#: vacuumdb.c:920
+#, 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:924
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all städa i alla databaser\n"
+
+#: vacuumdb.c:925
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAMN databas att städa i\n"
+
+#: vacuumdb.c:926
+#, 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:927
+#, 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:928
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full utför full städning\n"
+
+#: vacuumdb.c:929
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze frys information om radtransaktioner\n"
+
+#: vacuumdb.c:930
+#, 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:931
+#, 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:932
+#, 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:933
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLELLNIVÅ använda så här många bakgrundsarbetare för städning, om det finns\n"
+
+#: vacuumdb.c:934
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet skriv inte ut några meddelanden\n"
+
+#: vacuumdb.c:935
+#, 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:936
+#, 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:937
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose skriv massor med utdata\n"
+
+#: vacuumdb.c:938
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version visa versionsinformation, avsluta sedan\n"
+
+#: vacuumdb.c:939
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze uppdatera optimeringsstatistik\n"
+
+#: vacuumdb.c:940
+#, 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: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 uppdatera bara optimeringsstatistik, men i\n"
+" flera steg för snabbare resultat; ingen städning\n"
+
+#: vacuumdb.c:943
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help visa denna hjälp, avsluta sedan\n"
+
+#: vacuumdb.c:951
+#, 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..f815827
--- /dev/null
+++ b/src/bin/scripts/po/tr.po
@@ -0,0 +1,1224 @@
+# 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: 2019-06-13 14:10+0300\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"
+"\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..8787c27
--- /dev/null
+++ b/src/bin/scripts/po/uk.po
@@ -0,0 +1,1089 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: postgresql\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2020-09-21 21:16+0000\n"
+"PO-Revision-Date: 2020-09-22 13:43\n"
+"Last-Translator: \n"
+"Language-Team: Ukrainian\n"
+"Language: uk_UA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
+"X-Crowdin-Project: postgresql\n"
+"X-Crowdin-Project-ID: 324573\n"
+"X-Crowdin-Language: uk\n"
+"X-Crowdin-File: /DEV_13/pgscripts.pot\n"
+"X-Crowdin-File-ID: 514\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 "неможливо дублювати нульовий покажчик (внутрішня помилка)\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
+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 рядок)"
+msgstr[1] "(%lu рядки)"
+msgstr[2] "(%lu рядків)"
+msgstr[3] "(%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 "неможливо кластеризувати всі бази даних і одну вказану одночасно"
+
+#: clusterdb.c:149
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "неможливо кластеризувати вказані таблиці у всіх базах даних"
+
+#: clusterdb.c:217
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "кластеризувати таблицю \"%s\" у базі даних \"%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 кластеризація усіх попередньо кластеризованих таблиць в базі даних.\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 [OPTION]... [DBNAME]\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=ІМ'Я_БД база даних для кластеризації\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=ТАБЛИЦЯ кластеризувати тільки вказані таблиці\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=ІМ'Я_КОРИСТУВАЧА ім'я користувача для з'єднання з сервером\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"
+"Для деталей читайте опис команди SQL CLUSTER.\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"
+msgstr[1] "запит повернув %d рядки замість одного: %s"
+msgstr[2] "запит повернув %d рядків замість одного: %s"
+msgstr[3] "запит повернув %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 [OPTION]... [DBNAME] [DESCRIPTION]\n"
+
+#: createdb.c:262
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --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=КОДУВАННЯ кодування бази даних\n"
+
+#: createdb.c:265
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=ЛОКАЛЬ параметри локалі бази даних\n"
+
+#: createdb.c:266
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=ЛОКАЛЬ параметр LC_COLLATE для бази даних\n"
+
+#: createdb.c:267
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=ЛОКАЛЬ параметр LC_CTYPE для бази даних\n"
+
+#: createdb.c:268
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --власник=ВЛАСНИК користувач-власник нової бази даних\n"
+
+#: createdb.c:269
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --шаблон=ШАБЛОН шаблонна база даних для копіювання\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=ІМ'Я_ХОСТА хост сервера бази даних або каталог сокетів\n"
+
+#: createdb.c:274
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=ПОРТ порт сервера бази даних\n"
+
+#: createdb.c:275
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --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"
+"За замовчуванням ім'ям бази даних вважається ім'я поточного користувача.\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 "Введіть ім'я нової ролі: "
+
+#: 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 "Чи буде нова роль суперкористувачем?"
+
+#: 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 [OPTION]... [ROLENAME]\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=РОЛЬ нова роль буде включена в цю роль\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 роль буде суперкористувачем\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"
+
+#: 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"
+
+#: 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 "Ви впевнені?"
+
+#: 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 [OPTION]... ІМ'Я_БД\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 ім'я користувача для підключення (не для розривання)\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: [OPTION]...\n"
+
+#: pg_isready.c:228
+#, c-format
+msgid " -d, --dbname=DBNAME database name\n"
+msgstr " -d, --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=ПОРТ порт сервера бази даних\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 секунд для очікування при спробі підключення, 0 без обмежень (за замовчуванням: %s)\n"
+
+#: pg_isready.c:237
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --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 "не можна конкурентно переіндексувати системні каталоги, пропускаємо"
+
+#: 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\" в базі даних \"%s\" не вдалося: %s"
+
+#: reindexdb.c:566
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "переіндексувати схему \"%s\" в базі даних \"%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\" в базі даних \"%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=ІМ'Я_БД база даних для переіндексування\n"
+
+#: reindexdb.c:760
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --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=СХЕМА переіндексувати тільки вказані схеми\n"
+
+#: reindexdb.c:765
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=ТАБЛИЦЯ переіндексувати тільки вказані таблиці\n"
+
+#: reindexdb.c:776
+#, c-format
+msgid "\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr "\n"
+"Для деталей читайте опис команди SQL REINDEX.\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 "ступінь паралельного очищення повинен бути не від'ємним цілим"
+
+#: 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 "мінімальна ера 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 "не можна використовувати параметр \"%s\" під час виконання VACUUM FULL"
+
+#: vacuumdb.c:300
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "неможливо очистити всі бази даних і одну вказану одночасно"
+
+#: 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\" в базі даних \"%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"
+
+#: 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=ІМ'Я_БД база даних для очищення\n"
+
+#: vacuumdb.c:926
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-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=ЧИСЛО використати ці паралельні підключення для очищення\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 мінімальний ID ери мультитранзакції таблиць для вакууму\n"
+
+#: vacuumdb.c:932
+#, 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:933
+#, c-format
+msgid " -P, --parallel=PARALLEL_DEGREE use this many background workers for vacuum, if available\n"
+msgstr " -P, --parallel=PARALLEL_DEGREE використати таку кількість фонових процесів для очищення, якщо вони доступні\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='ТАБЛИЦЯ[(СТОВПЦІ)]' очистити тільки вказані таблиці\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"
+
+#: 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"
+"Для деталей читайте опис команди 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..6ccd93d
--- /dev/null
+++ b/src/bin/scripts/po/zh_CN.po
@@ -0,0 +1,1086 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pgscripts (PostgreSQL) 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-05-22 17:56+0800\n"
+"PO-Revision-Date: 2019-06-03 18:30+0800\n"
+"Last-Translator: Jie Zhang <zhangjie2@cn.fujitsu.com>\n"
+"Language-Team: Chinese (Simplified) <zhangjie2@cn.fujitsu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"X-Generator: Poedit 1.5.7\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../../../src/common/logging.c:188
+#, c-format
+msgid "fatal: "
+msgstr "致命的: "
+
+#: ../../../src/common/logging.c:195
+#, c-format
+msgid "error: "
+msgstr "错误: "
+
+#: ../../../src/common/logging.c:202
+#, c-format
+msgid "warning: "
+msgstr "警告: "
+
+#: ../../common/fe_memutils.c:35 ../../common/fe_memutils.c:75
+#: ../../common/fe_memutils.c:98
+#, c-format
+msgid "out of memory\n"
+msgstr "内存溢出\n"
+
+#: ../../common/fe_memutils.c:92
+#, 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/print.c:353
+#, c-format
+msgid "(%lu row)"
+msgid_plural "(%lu rows)"
+msgstr[0] "(%lu 行记录)"
+msgstr[1] "(%lu 行记录)"
+
+#: ../../fe_utils/print.c:3058
+#, c-format
+msgid "Interrupted\n"
+msgstr "已中断\n"
+
+#: ../../fe_utils/print.c:3122
+#, c-format
+msgid "Cannot add header to table content: column count of %d exceeded.\n"
+msgstr "无法对表的内容增加标题:已经超过%d列的数量.\n"
+
+#: ../../fe_utils/print.c:3162
+#, c-format
+msgid "Cannot add cell to table content: total cell count of %d exceeded.\n"
+msgstr "无法对表的内容添加单元: 总共有%d个单元超过.\n"
+
+#: ../../fe_utils/print.c:3417
+#, c-format
+msgid "invalid output format (internal error): %d"
+msgstr "无效的输出格式 (内部错误): %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 "请用 \"%s --help\" 获取更多的信息.\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 "太多的命令行参数 (第一个是 \"%s\")"
+
+#: clusterdb.c:142
+#, c-format
+msgid "cannot cluster all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的数据库同时建簇"
+
+#: clusterdb.c:148
+#, c-format
+msgid "cannot cluster specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定表进行建簇"
+
+#: clusterdb.c:216
+#, c-format
+msgid "clustering of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库 \"%2$s\" 中的表 \"%1$s\" 建簇失败: %3$s"
+
+#: clusterdb.c:219
+#, c-format
+msgid "clustering of database \"%s\" failed: %s"
+msgstr "数据库 \"%s\" 建簇失败: %s"
+
+#: clusterdb.c:252
+#, c-format
+msgid "%s: clustering database \"%s\"\n"
+msgstr "%s: 对数据库 \"%s\" 进行建簇\n"
+
+#: clusterdb.c:273
+#, c-format
+msgid ""
+"%s clusters all previously clustered tables in a database.\n"
+"\n"
+msgstr ""
+"%s 对一个数据库中先前已经建过簇的表进行建簇.\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:1216
+#, c-format
+msgid "Usage:\n"
+msgstr "使用方法:\n"
+
+#: clusterdb.c:275 reindexdb.c:426 vacuumdb.c:1217
+#, c-format
+msgid " %s [OPTION]... [DBNAME]\n"
+msgstr " %s [选项]... [数据库名]\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:1218
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"选项:\n"
+
+#: clusterdb.c:277
+#, c-format
+msgid " -a, --all cluster all databases\n"
+msgstr " -a, --all 对所有数据库建簇\n"
+
+#: clusterdb.c:278
+#, c-format
+msgid " -d, --dbname=DBNAME database to cluster\n"
+msgstr " -d, --dbname=DBNAME 对数据库 DBNAME 建簇\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 显示发送到服务端的命令\n"
+
+#: clusterdb.c:280 reindexdb.c:433
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 不写任何信息\n"
+
+#: clusterdb.c:281
+#, c-format
+msgid " -t, --table=TABLE cluster specific table(s) only\n"
+msgstr " -t, --table=TABLE 只对指定的表建簇\n"
+
+#: clusterdb.c:282 reindexdb.c:437
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 写大量的输出\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 输出版本信息, 然后退出\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 显示此帮助, 然后退出\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:1238
+#, c-format
+msgid ""
+"\n"
+"Connection options:\n"
+msgstr ""
+"\n"
+"联接选项:\n"
+
+#: clusterdb.c:286 createuser.c:369 dropdb.c:166 dropuser.c:173
+#: reindexdb.c:441 vacuumdb.c:1239
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAM 数据库服务器所在机器的主机名或套接字目录\n"
+
+#: clusterdb.c:287 createuser.c:370 dropdb.c:167 dropuser.c:174
+#: reindexdb.c:442 vacuumdb.c:1240
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 数据库服务器端口号\n"
+
+#: clusterdb.c:288 dropdb.c:168 reindexdb.c:443 vacuumdb.c:1241
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 联接的用户名\n"
+
+#: clusterdb.c:289 createuser.c:372 dropdb.c:169 dropuser.c:176
+#: reindexdb.c:444 vacuumdb.c:1242
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 永远不提示输入口令\n"
+
+#: clusterdb.c:290 createuser.c:373 dropdb.c:170 dropuser.c:177
+#: reindexdb.c:445 vacuumdb.c:1243
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 强制提示输入口令\n"
+
+#: clusterdb.c:291 dropdb.c:171 reindexdb.c:446 vacuumdb.c:1244
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 更改维护数据库\n"
+
+#: clusterdb.c:292
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command CLUSTER for details.\n"
+msgstr ""
+"\n"
+"阅读 SQL 命令 CLUSTER 的描述信息, 以便获得更详细的信息.\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:1246
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <pgsql-bugs@lists.postgresql.org>.\n"
+msgstr ""
+"\n"
+"臭虫报告至 <pgsql-bugs@lists.postgresql.org>.\n"
+
+#: common.c:84 common.c:130
+msgid "Password: "
+msgstr "口令: "
+
+#: common.c:117
+#, c-format
+msgid "could not connect to database %s: out of memory"
+msgstr "无法连接到数据库 %s:内存不足"
+
+#: common.c:144
+#, c-format
+msgid "could not connect to database %s: %s"
+msgstr "无法联接到数据库 %s: %s"
+
+#: common.c:196 common.c:222
+#, c-format
+msgid "query failed: %s"
+msgstr "查询失败: %s"
+
+#: common.c:197 common.c:223
+#, c-format
+msgid "query was: %s"
+msgstr "查询是: %s"
+
+#: common.c:339
+#, 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:364
+msgid "y"
+msgstr "y"
+
+#. translator: abbreviation for "no"
+#: common.c:366
+msgid "n"
+msgstr "n"
+
+#. translator: This is a question followed by the translated options for
+#. "yes" and "no".
+#: common.c:376
+#, c-format
+msgid "%s (%s/%s) "
+msgstr "%s (%s/%s) "
+
+#: common.c:390
+#, c-format
+msgid "Please answer \"%s\" or \"%s\".\n"
+msgstr "请回答\"%s\"或\"%s\".\n"
+
+#: common.c:469 common.c:506
+#, c-format
+msgid "Cancel request sent\n"
+msgstr "取消发送的请求\n"
+
+#: common.c:472 common.c:510
+#, c-format
+msgid "Could not send cancel request: %s"
+msgstr "无法发送取消请求: %s"
+
+#: 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:212
+#, c-format
+msgid "database creation failed: %s"
+msgstr "创建数据库失败: %s"
+
+#: createdb.c:231
+#, c-format
+msgid "comment creation failed (database was created): %s"
+msgstr "创建注释失败 (数据库已创建): %s"
+
+#: createdb.c:249
+#, c-format
+msgid ""
+"%s creates a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 创建一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: createdb.c:251
+#, c-format
+msgid " %s [OPTION]... [DBNAME] [DESCRIPTION]\n"
+msgstr " %s [选项]... [数据库名称] [描述]\n"
+
+#: createdb.c:253
+#, c-format
+msgid " -D, --tablespace=TABLESPACE default tablespace for the database\n"
+msgstr " -D, --tablespace=TABLESPACE 数据库默认表空间\n"
+
+#: createdb.c:254
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 显示发送到服务端的命令\n"
+
+#: createdb.c:255
+#, c-format
+msgid " -E, --encoding=ENCODING encoding for the database\n"
+msgstr " -E, --encoding=ENCODING 数据库编码\n"
+
+#: createdb.c:256
+#, c-format
+msgid " -l, --locale=LOCALE locale settings for the database\n"
+msgstr " -l, --locale=LOCALE 数据库的本地化设置\n"
+
+#: createdb.c:257
+#, c-format
+msgid " --lc-collate=LOCALE LC_COLLATE setting for the database\n"
+msgstr " --lc-collate=LOCALE 数据库的LC_COLLATE设置\n"
+
+#: createdb.c:258
+#, c-format
+msgid " --lc-ctype=LOCALE LC_CTYPE setting for the database\n"
+msgstr " --lc-ctype=LOCALE 数据库的LC_CTYPE设置\n"
+
+#: createdb.c:259
+#, c-format
+msgid " -O, --owner=OWNER database user to own the new database\n"
+msgstr " -O, --owner=OWNER 新数据库的所属用户\n"
+
+#: createdb.c:260
+#, c-format
+msgid " -T, --template=TEMPLATE template database to copy\n"
+msgstr " -T, --template=TEMPLATE 要拷贝的数据库模板\n"
+
+#: createdb.c:261
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: createdb.c:262
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助, 然后退出\n"
+
+#: createdb.c:264
+#, c-format
+msgid " -h, --host=HOSTNAME database server host or socket directory\n"
+msgstr " -h, --host=HOSTNAME 数据库服务器所在机器的主机名或套接字目录\n"
+
+#: createdb.c:265
+#, c-format
+msgid " -p, --port=PORT database server port\n"
+msgstr " -p, --port=PORT 数据库服务器端口号\n"
+
+#: createdb.c:266
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as\n"
+msgstr " -U, --username=USERNAME 联接的用户名\n"
+
+#: createdb.c:267
+#, c-format
+msgid " -w, --no-password never prompt for password\n"
+msgstr " -w, --no-password 永远不提示输入口令\n"
+
+#: createdb.c:268
+#, c-format
+msgid " -W, --password force password prompt\n"
+msgstr " -W, --password 强制提示输入口令\n"
+
+#: createdb.c:269
+#, c-format
+msgid " --maintenance-db=DBNAME alternate maintenance database\n"
+msgstr " --maintenance-db=DBNAME 更改维护数据库\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"
+"默认情况下, 以当前用户的用户名创建数据库.\n"
+
+#: createuser.c:191
+msgid "Enter name of role to add: "
+msgstr "输入要增加的角色名称: "
+
+#: createuser.c:208
+msgid "Enter password for new role: "
+msgstr "为新角色输入的口令: "
+
+#: createuser.c:210
+msgid "Enter it again: "
+msgstr "再输入一遍: "
+
+#: createuser.c:213
+#, c-format
+msgid "Passwords didn't match.\n"
+msgstr "口令不匹配.\n"
+
+#: createuser.c:221
+msgid "Shall the new role be a superuser?"
+msgstr "新的角色是否是超级用户?"
+
+#: createuser.c:236
+msgid "Shall the new role be allowed to create databases?"
+msgstr "新的角色允许创建数据库吗?"
+
+#: createuser.c:244
+msgid "Shall the new role be allowed to create more new roles?"
+msgstr "新角色允许创建其它新的角色吗? "
+
+#: createuser.c:274
+#, c-format
+msgid "password encryption failed: %s"
+msgstr "密码加密失败: %s"
+
+#: createuser.c:329
+#, c-format
+msgid "creation of new role failed: %s"
+msgstr "创建新用户失败: %s"
+
+#: createuser.c:343
+#, c-format
+msgid ""
+"%s creates a new PostgreSQL role.\n"
+"\n"
+msgstr ""
+"%s 创建一个新的 PostgreSQL 用户.\n"
+"\n"
+
+#: createuser.c:345 dropuser.c:164
+#, c-format
+msgid " %s [OPTION]... [ROLENAME]\n"
+msgstr " %s [选项]... [用户名]\n"
+
+#: createuser.c:347
+#, c-format
+msgid " -c, --connection-limit=N connection limit for role (default: no limit)\n"
+msgstr " -c, --connection-limit=N 角色的连接限制(缺省: 没有限制)\n"
+
+#: createuser.c:348
+#, c-format
+msgid " -d, --createdb role can create new databases\n"
+msgstr " -d, --createdb 此角色可以创建新数据库\n"
+
+#: createuser.c:349
+#, c-format
+msgid " -D, --no-createdb role cannot create databases (default)\n"
+msgstr " -D, --no-createdb 此角色不可以创建新数据库(默认)\n"
+
+#: createuser.c:351
+#, c-format
+msgid " -g, --role=ROLE new role will be a member of this role\n"
+msgstr " -g, --role=ROLE 新的角色必须是这个角色的成员\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 角色能够继承它所属角色的权限\n"
+" (这是缺省情况)\n"
+
+#: createuser.c:354
+#, c-format
+msgid " -I, --no-inherit role does not inherit privileges\n"
+msgstr " -I, --no-inherit 角色不继承权限\n"
+
+#: createuser.c:355
+#, c-format
+msgid " -l, --login role can login (default)\n"
+msgstr " -l, --login 角色能够登录(这是缺省情况)\n"
+
+#: createuser.c:356
+#, c-format
+msgid " -L, --no-login role cannot login\n"
+msgstr " -L, --no-login 角色不能登录\n"
+
+#: createuser.c:357
+#, c-format
+msgid " -P, --pwprompt assign a password to new role\n"
+msgstr " -P, --pwprompt 给新角色指定口令\n"
+
+#: createuser.c:358
+#, c-format
+msgid " -r, --createrole role can create new roles\n"
+msgstr " -r, --createrole 这个角色可以创建新的角色\n"
+
+#: createuser.c:359
+#, c-format
+msgid " -R, --no-createrole role cannot create roles (default)\n"
+msgstr " -R, --no-createrole 这个角色没有创建其它角色的权限(默认)\n"
+
+#: createuser.c:360
+#, c-format
+msgid " -s, --superuser role will be superuser\n"
+msgstr " -s, --superuser 角色将是超级用户\n"
+
+#: createuser.c:361
+#, c-format
+msgid " -S, --no-superuser role will not be superuser (default)\n"
+msgstr " -S, --no-superuser 角色不能是超级用户(默认)\n"
+
+#: createuser.c:363
+#, c-format
+msgid ""
+" --interactive prompt for missing role name and attributes rather\n"
+" than using defaults\n"
+msgstr ""
+" --interactive 提示缺少角色名及其属性\n"
+" 而不是使用默认值\n"
+
+#: createuser.c:365
+#, c-format
+msgid " --replication role can initiate replication\n"
+msgstr " --replication 角色能启动复制\n"
+
+#: createuser.c:366
+#, c-format
+msgid " --no-replication role cannot initiate replication\n"
+msgstr " --no-replication 角色不能启动复制\n"
+
+#: createuser.c:371
+#, c-format
+msgid " -U, --username=USERNAME user name to connect as (not the one to create)\n"
+msgstr " -U, --username=USERNAME 联接用户 (不是要创建的用户名)\n"
+
+#: dropdb.c:104
+#, c-format
+msgid "missing required argument database name"
+msgstr "缺少需要的数据库名参数"
+
+#: dropdb.c:119
+#, c-format
+msgid "Database \"%s\" will be permanently removed.\n"
+msgstr "数据库 \"%s\" 将被永久的删除.\n"
+
+#: dropdb.c:120 dropuser.c:130
+msgid "Are you sure?"
+msgstr "您确定吗? (y/n) "
+
+#: dropdb.c:142
+#, c-format
+msgid "database removal failed: %s"
+msgstr "数据库删除失败: %s"
+
+#: dropdb.c:156
+#, c-format
+msgid ""
+"%s removes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 删除一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: dropdb.c:158
+#, c-format
+msgid " %s [OPTION]... DBNAME\n"
+msgstr " %s [选项]... 数据库名\n"
+
+#: dropdb.c:161
+#, c-format
+msgid " -i, --interactive prompt before deleting anything\n"
+msgstr " -i, --interactive 删除任何东西之前给予提示\n"
+
+#: dropdb.c:163
+#, 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 联接用户 (不是要删除的用户名)\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=主机名 数据库服务器的主机名或套接字目录\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=SECS 尝试连接时要等待的秒数, 值为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:168
+#, c-format
+msgid "cannot reindex all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的索引同时进行索引重建操作"
+
+#: reindexdb.c:173
+#, c-format
+msgid "cannot reindex all databases and system catalogs at the same time"
+msgstr "无法对所有数据库和系统目录同时进行索引重建操作"
+
+#: reindexdb.c:178
+#, c-format
+msgid "cannot reindex specific schema(s) in all databases"
+msgstr "无法在所有数据库中对指定模式上的索引进行重建"
+
+#: reindexdb.c:183
+#, c-format
+msgid "cannot reindex specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定表上的索引进行重建"
+
+#: reindexdb.c:188
+#, c-format
+msgid "cannot reindex specific index(es) in all databases"
+msgstr "无法在所有数据库中对指定的索引进行重建"
+
+#: reindexdb.c:199
+#, c-format
+msgid "cannot reindex specific schema(s) and system catalogs at the same time"
+msgstr "无法对指定的模式和系统目录同时进行索引重建"
+
+#: reindexdb.c:204
+#, c-format
+msgid "cannot reindex specific table(s) and system catalogs at the same time"
+msgstr "无法对指定的表和系统视图同时进行索引重建操作"
+
+#: reindexdb.c:209
+#, c-format
+msgid "cannot reindex specific index(es) and system catalogs at the same time"
+msgstr "无法对指定索引和系统视图同时进行索引重建操作"
+
+#: reindexdb.c:298 vacuumdb.c:412 vacuumdb.c:420 vacuumdb.c:427 vacuumdb.c:434
+#, c-format
+#| msgid "%s: cannot use the \"%s\" option when performing only analyze\n"
+msgid "cannot use the \"%s\" option on server versions older than PostgreSQL %s"
+msgstr "不能在PostgreSQL %2$s之前的服务器版本上使用 \"%1$s\" 选项"
+
+#: reindexdb.c:326
+#, c-format
+msgid "reindexing of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对表\"%1$s\"上的索引重新创建失败: %3$s"
+
+#: reindexdb.c:329
+#, c-format
+msgid "reindexing of index \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对索引\"%1$s\"重新创建失败: %3$s"
+
+#: reindexdb.c:332
+#, c-format
+msgid "reindexing of schema \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库\"%2$s\"中对模式\"%1$s\"的索引重建失败:%3$s"
+
+#: reindexdb.c:335
+#, c-format
+msgid "reindexing of database \"%s\" failed: %s"
+msgstr "在数据库\"%s\"上重新创建索引失败: %s"
+
+#: reindexdb.c:369
+#, c-format
+msgid "%s: reindexing database \"%s\"\n"
+msgstr "%s: 对数据库 \"%s\" 重新创建索引\n"
+
+#: reindexdb.c:412
+#, c-format
+msgid "reindexing of system catalogs failed: %s"
+msgstr "对目录视图重新创建索引失败: %s"
+
+#: reindexdb.c:424
+#, c-format
+msgid ""
+"%s reindexes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 对一个PostgreSQL 数据库重新创建索引.\n"
+"\n"
+
+#: reindexdb.c:428
+#, c-format
+msgid " -a, --all reindex all databases\n"
+msgstr " -a, --all 对所有数据库进行重建索引操作\n"
+
+#: reindexdb.c:429
+#, c-format
+msgid " --concurrently reindex concurrently\n"
+msgstr " --concurrently 同时重新索引\n"
+
+#: reindexdb.c:430
+#, c-format
+msgid " -d, --dbname=DBNAME database to reindex\n"
+msgstr " -d, --dbname=数据库名称 对数据库中的索引进行重建\n"
+
+#: reindexdb.c:432
+#, c-format
+msgid " -i, --index=INDEX recreate specific index(es) only\n"
+msgstr " -i, --index=INDEX 仅重新创建指定的索引\n"
+
+#: reindexdb.c:434
+#, c-format
+msgid " -s, --system reindex system catalogs\n"
+msgstr " -s, --system 对系统视图重新创建索引\n"
+
+#: reindexdb.c:435
+#, c-format
+msgid " -S, --schema=SCHEMA reindex specific schema(s) only\n"
+msgstr " -S, --schema=SCHEMA 只对指定模式重建索引\n"
+
+#: reindexdb.c:436
+#, c-format
+msgid " -t, --table=TABLE reindex specific table(s) only\n"
+msgstr " -t, --table=表名 只对指定的表重新创建索引\n"
+
+#: reindexdb.c:447
+#, c-format
+msgid ""
+"\n"
+"Read the description of the SQL command REINDEX for details.\n"
+msgstr ""
+"\n"
+"阅读SQL命令REINDEX的描述信息, 以便获得更详细的信息.\n"
+
+#: vacuumdb.c:207
+#, c-format
+msgid "number of parallel jobs must be at least 1"
+msgstr "并行工作的数量必须至少为1"
+
+#: vacuumdb.c:212
+#, c-format
+msgid "too many parallel jobs requested (maximum: %d)"
+msgstr "请求了太多并行任务(最大:%d)"
+
+#: vacuumdb.c:233
+#, c-format
+msgid "minimum transaction ID age must be at least 1"
+msgstr "最小事务ID必须至少为1"
+
+#: vacuumdb.c:241
+#, c-format
+msgid "minimum multixact ID age must be at least 1"
+msgstr "最小多事务ID必须至少为1"
+
+#: vacuumdb.c:273 vacuumdb.c:279 vacuumdb.c:285
+#, c-format
+msgid "cannot use the \"%s\" option when performing only analyze"
+msgstr "在只执行分析的时候,无法使用\"%s\"选项"
+
+#: vacuumdb.c:302
+#, c-format
+msgid "cannot vacuum all databases and a specific one at the same time"
+msgstr "无法对所有数据库和一个指定的数据库同时清理"
+
+#: vacuumdb.c:307
+#, c-format
+msgid "cannot vacuum specific table(s) in all databases"
+msgstr "无法在所有数据库中对指定的表进行清理"
+
+#: vacuumdb.c:398
+msgid "Generating minimal optimizer statistics (1 target)"
+msgstr "产生最小优化器统计(一个目标)"
+
+#: vacuumdb.c:399
+msgid "Generating medium optimizer statistics (10 targets)"
+msgstr "产生中等优化器统计(10个目标)"
+
+#: vacuumdb.c:400
+msgid "Generating default (full) optimizer statistics"
+msgstr "产生缺省(完全)优化器统计"
+
+#: vacuumdb.c:442
+#, c-format
+msgid "%s: processing database \"%s\": %s\n"
+msgstr "%s:处理数据库\"%s\":%s\n"
+
+#: vacuumdb.c:445
+#, c-format
+msgid "%s: vacuuming database \"%s\"\n"
+msgstr "%s: 清理数据库 \"%s\"\n"
+
+#: vacuumdb.c:942
+#, c-format
+msgid "vacuuming of table \"%s\" in database \"%s\" failed: %s"
+msgstr "在数据库 \"%2$s\" 中的表 \"%1$s\" 清理失败: %3$s"
+
+#: vacuumdb.c:945 vacuumdb.c:1080
+#, c-format
+msgid "vacuuming of database \"%s\" failed: %s"
+msgstr "数据库 \"%s\" 清理失败: %s"
+
+#: vacuumdb.c:1215
+#, c-format
+msgid ""
+"%s cleans and analyzes a PostgreSQL database.\n"
+"\n"
+msgstr ""
+"%s 清理并且优化一个 PostgreSQL 数据库.\n"
+"\n"
+
+#: vacuumdb.c:1219
+#, c-format
+msgid " -a, --all vacuum all databases\n"
+msgstr " -a, --all 清理所有的数据库\n"
+
+#: vacuumdb.c:1220
+#, c-format
+msgid " -d, --dbname=DBNAME database to vacuum\n"
+msgstr " -d, --dbname=DBNAME 清理数据库 DBNAME\n"
+
+#: vacuumdb.c:1221
+#, c-format
+msgid " --disable-page-skipping disable all page-skipping behavior\n"
+msgstr " --disable-page-skipping 禁用所有页面跳过行为\n"
+
+#: vacuumdb.c:1222
+#, c-format
+msgid " -e, --echo show the commands being sent to the server\n"
+msgstr " -e, --echo 显示发送到服务端的命令\n"
+
+#: vacuumdb.c:1223
+#, c-format
+msgid " -f, --full do full vacuuming\n"
+msgstr " -f, --full 完全清理\n"
+
+#: vacuumdb.c:1224
+#, c-format
+msgid " -F, --freeze freeze row transaction information\n"
+msgstr " -F, --freeze 冻结记录的事务信息\n"
+
+#: vacuumdb.c:1225
+#, c-format
+msgid " -j, --jobs=NUM use this many concurrent connections to vacuum\n"
+msgstr " -j, --jobs=NUM 使用这么多个并发连接进行清理\n"
+
+#: vacuumdb.c:1226
+#, 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:1227
+#, 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:1228
+#, c-format
+msgid " -q, --quiet don't write any messages\n"
+msgstr " -q, --quiet 不写任何信息\n"
+
+#: vacuumdb.c:1229
+#, c-format
+msgid " --skip-locked skip relations that cannot be immediately locked\n"
+msgstr " --skip-locked 跳过不能立即锁定的关系\n"
+
+#: vacuumdb.c:1230
+#, c-format
+msgid " -t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only\n"
+msgstr " -t, --table='TABLE[(COLUMNS)]' 只清理指定的表\n"
+
+#: vacuumdb.c:1231
+#, c-format
+msgid " -v, --verbose write a lot of output\n"
+msgstr " -v, --verbose 写大量的输出\n"
+
+#: vacuumdb.c:1232
+#, c-format
+msgid " -V, --version output version information, then exit\n"
+msgstr " -V, --version 输出版本信息, 然后退出\n"
+
+#: vacuumdb.c:1233
+#, c-format
+msgid " -z, --analyze update optimizer statistics\n"
+msgstr " -z, --analyze 更新优化器统计\n"
+
+#: vacuumdb.c:1234
+#, c-format
+msgid " -Z, --analyze-only only update optimizer statistics; no vacuum\n"
+msgstr " -Z, --analyze-only 只更新优化器统计信息,但不做清理\n"
+
+#: vacuumdb.c:1235
+#, 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:1237
+#, c-format
+msgid " -?, --help show this help, then exit\n"
+msgstr " -?, --help 显示此帮助信息, 然后退出\n"
+
+#: vacuumdb.c:1245
+#, 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..4000338
--- /dev/null
+++ b/src/bin/scripts/reindexdb.c
@@ -0,0 +1,776 @@
+/*-------------------------------------------------------------------------
+ *
+ * reindexdb
+ *
+ * Portions Copyright (c) 1996-2020, 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/simple_list.h"
+#include "fe_utils/string_utils.h"
+#include "scripts_parallel.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(const ConnParams *cparams, ReindexType type,
+ SimpleStringList *user_list,
+ const char *progname,
+ bool echo, bool verbose, bool concurrently,
+ int concurrentCons);
+static void reindex_all_databases(ConnParams *cparams,
+ const char *progname, bool echo,
+ bool quiet, bool verbose, bool concurrently,
+ int concurrentCons);
+static void run_reindex_command(PGconn *conn, ReindexType type,
+ const char *name, bool echo, bool verbose,
+ bool concurrently, bool async);
+
+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},
+ {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;
+ 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;
+ 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);
+ }
+ 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);
+ }
+ 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);
+
+ if (indexes.head != NULL)
+ reindex_one_database(&cparams, REINDEX_INDEX, &indexes,
+ progname, echo, verbose,
+ concurrently, 1);
+
+ if (tables.head != NULL)
+ reindex_one_database(&cparams, REINDEX_TABLE, &tables,
+ progname, echo, verbose,
+ concurrently, concurrentCons);
+
+ /*
+ * 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);
+ }
+
+ exit(0);
+}
+
+static void
+reindex_one_database(const ConnParams *cparams, ReindexType type,
+ SimpleStringList *user_list,
+ const char *progname, bool echo,
+ bool verbose, bool concurrently, int concurrentCons)
+{
+ PGconn *conn;
+ SimpleStringListCell *cell;
+ bool parallel = concurrentCons > 1;
+ SimpleStringList *process_list = user_list;
+ ReindexType process_type = type;
+ ParallelSlot *slots;
+ 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 (!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);
+
+ /* 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);
+
+ slots = ParallelSlotsSetup(cparams, progname, echo, conn, concurrentCons);
+
+ cell = process_list->head;
+ do
+ {
+ const char *objname = cell->val;
+ ParallelSlot *free_slot = NULL;
+
+ if (CancelRequested)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ free_slot = ParallelSlotsGetIdle(slots, concurrentCons);
+ if (!free_slot)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ run_reindex_command(free_slot->connection, process_type, objname,
+ echo, verbose, concurrently, true);
+
+ cell = cell->next;
+ } while (cell != NULL);
+
+ if (!ParallelSlotsWaitCompletion(slots, concurrentCons))
+ failed = true;
+
+finish:
+ if (process_list != user_list)
+ {
+ simple_string_list_destroy(process_list);
+ pg_free(process_list);
+ }
+
+ ParallelSlotsTerminate(slots, concurrentCons);
+ pfree(slots);
+
+ if (failed)
+ exit(1);
+}
+
+static void
+run_reindex_command(PGconn *conn, ReindexType type, const char *name,
+ bool echo, bool verbose, bool concurrently, bool async)
+{
+ PQExpBufferData sql;
+ bool status;
+
+ Assert(name);
+
+ /* build the REINDEX query */
+ initPQExpBuffer(&sql);
+
+ appendPQExpBufferStr(&sql, "REINDEX ");
+
+ if (verbose)
+ appendPQExpBufferStr(&sql, "(VERBOSE) ");
+
+ /* 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;
+ }
+
+ 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);
+ appendPQExpBuffer(&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.
+ */
+ appendPQExpBuffer(&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)
+ appendPQExpBuffer(&catalog_query, ", ");
+ else
+ nsp_listed = true;
+
+ appendStringLiteralConn(&catalog_query, nspname, conn);
+ }
+
+ appendPQExpBuffer(&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)
+{
+ 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);
+ }
+
+ 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\n"));
+ printf(_(" -S, --schema=SCHEMA reindex specific schema(s) only\n"));
+ printf(_(" -t, --table=TABLE reindex 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 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/scripts_parallel.c b/src/bin/scripts/scripts_parallel.c
new file mode 100644
index 0000000..ec264a2
--- /dev/null
+++ b/src/bin/scripts/scripts_parallel.c
@@ -0,0 +1,284 @@
+/*-------------------------------------------------------------------------
+ *
+ * scripts_parallel.c
+ * Parallel support for bin/scripts/
+ *
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/scripts/scripts_parallel.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef WIN32
+#define FD_SETSIZE 1024 /* must set before winsock2.h is included */
+#endif
+
+#include "postgres_fe.h"
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+#include "common.h"
+#include "common/logging.h"
+#include "fe_utils/cancel.h"
+#include "scripts_parallel.h"
+
+static void init_slot(ParallelSlot *slot, PGconn *conn);
+static int select_loop(int maxFd, fd_set *workerset);
+
+static void
+init_slot(ParallelSlot *slot, PGconn *conn)
+{
+ slot->connection = conn;
+ /* Initially assume connection is idle */
+ slot->isFree = true;
+}
+
+/*
+ * Wait until a file descriptor from the given set becomes readable.
+ *
+ * Returns the number of ready descriptors, or -1 on failure (including
+ * getting a cancel request).
+ */
+static int
+select_loop(int maxFd, fd_set *workerset)
+{
+ int i;
+ fd_set saveSet = *workerset;
+
+ if (CancelRequested)
+ return -1;
+
+ for (;;)
+ {
+ /*
+ * On Windows, we need to check once in a while for cancel requests;
+ * on other platforms we rely on select() returning when interrupted.
+ */
+ struct timeval *tvp;
+#ifdef WIN32
+ struct timeval tv = {0, 1000000};
+
+ tvp = &tv;
+#else
+ tvp = NULL;
+#endif
+
+ *workerset = saveSet;
+ i = select(maxFd + 1, workerset, NULL, NULL, tvp);
+
+#ifdef WIN32
+ if (i == SOCKET_ERROR)
+ {
+ i = -1;
+
+ if (WSAGetLastError() == WSAEINTR)
+ errno = EINTR;
+ }
+#endif
+
+ if (i < 0 && errno == EINTR)
+ continue; /* ignore this */
+ if (i < 0 || CancelRequested)
+ return -1; /* but not this */
+ if (i == 0)
+ continue; /* timeout (Win32 only) */
+ break;
+ }
+
+ return i;
+}
+
+/*
+ * ParallelSlotsGetIdle
+ * Return a connection slot that is ready to execute a command.
+ *
+ * This returns the first slot we find that is marked isFree, if one is;
+ * otherwise, we loop on select() until one socket becomes available. When
+ * this happens, we read the whole set and mark as free all sockets that
+ * become available. If an error occurs, NULL is returned.
+ */
+ParallelSlot *
+ParallelSlotsGetIdle(ParallelSlot *slots, int numslots)
+{
+ int i;
+ int firstFree = -1;
+
+ /*
+ * Look for any connection currently free. If there is one, mark it as
+ * taken and let the caller know the slot to use.
+ */
+ for (i = 0; i < numslots; i++)
+ {
+ if (slots[i].isFree)
+ {
+ slots[i].isFree = false;
+ return slots + i;
+ }
+ }
+
+ /*
+ * No free slot found, so wait until one of the connections has finished
+ * its task and return the available slot.
+ */
+ while (firstFree < 0)
+ {
+ fd_set slotset;
+ int maxFd = 0;
+
+ /* We must reconstruct the fd_set for each call to select_loop */
+ FD_ZERO(&slotset);
+
+ for (i = 0; i < numslots; i++)
+ {
+ int sock = PQsocket(slots[i].connection);
+
+ /*
+ * We don't really expect any connections to lose their sockets
+ * after startup, but just in case, cope by ignoring them.
+ */
+ if (sock < 0)
+ continue;
+
+ FD_SET(sock, &slotset);
+ if (sock > maxFd)
+ maxFd = sock;
+ }
+
+ SetCancelConn(slots->connection);
+ i = select_loop(maxFd, &slotset);
+ ResetCancelConn();
+
+ /* failure? */
+ if (i < 0)
+ return NULL;
+
+ for (i = 0; i < numslots; i++)
+ {
+ int sock = PQsocket(slots[i].connection);
+
+ if (sock >= 0 && FD_ISSET(sock, &slotset))
+ {
+ /* select() says input is available, so consume it */
+ PQconsumeInput(slots[i].connection);
+ }
+
+ /* Collect result(s) as long as any are available */
+ while (!PQisBusy(slots[i].connection))
+ {
+ PGresult *result = PQgetResult(slots[i].connection);
+
+ if (result != NULL)
+ {
+ /* Check and discard the command result */
+ if (!processQueryResult(slots[i].connection, result))
+ return NULL;
+ }
+ else
+ {
+ /* This connection has become idle */
+ slots[i].isFree = true;
+ if (firstFree < 0)
+ firstFree = i;
+ break;
+ }
+ }
+ }
+ }
+
+ slots[firstFree].isFree = false;
+ return slots + firstFree;
+}
+
+/*
+ * ParallelSlotsSetup
+ * Prepare a set of parallel slots to use on a given database.
+ *
+ * This creates and initializes a set of connections to the database
+ * using the information given by the caller, marking all parallel slots
+ * as free and ready to use. "conn" is an initial connection set up
+ * by the caller and is associated with the first slot in the parallel
+ * set.
+ */
+ParallelSlot *
+ParallelSlotsSetup(const ConnParams *cparams,
+ const char *progname, bool echo,
+ PGconn *conn, int numslots)
+{
+ ParallelSlot *slots;
+ int i;
+
+ Assert(conn != NULL);
+
+ slots = (ParallelSlot *) pg_malloc(sizeof(ParallelSlot) * numslots);
+ init_slot(slots, conn);
+ if (numslots > 1)
+ {
+ for (i = 1; i < numslots; i++)
+ {
+ conn = connectDatabase(cparams, progname, echo, false, true);
+
+ /*
+ * Fail and exit immediately if trying to use a socket in an
+ * unsupported range. POSIX requires open(2) to use the lowest
+ * unused file descriptor and the hint given relies on that.
+ */
+ if (PQsocket(conn) >= FD_SETSIZE)
+ {
+ pg_log_fatal("too many jobs for this platform -- try %d", i);
+ exit(1);
+ }
+
+ init_slot(slots + i, conn);
+ }
+ }
+
+ return slots;
+}
+
+/*
+ * ParallelSlotsTerminate
+ * Clean up a set of parallel slots
+ *
+ * Iterate through all connections in a given set of ParallelSlots and
+ * terminate all connections.
+ */
+void
+ParallelSlotsTerminate(ParallelSlot *slots, int numslots)
+{
+ int i;
+
+ for (i = 0; i < numslots; i++)
+ {
+ PGconn *conn = slots[i].connection;
+
+ if (conn == NULL)
+ continue;
+
+ disconnectDatabase(conn);
+ }
+}
+
+/*
+ * ParallelSlotsWaitCompletion
+ *
+ * Wait for all connections to finish, returning false if at least one
+ * error has been found on the way.
+ */
+bool
+ParallelSlotsWaitCompletion(ParallelSlot *slots, int numslots)
+{
+ int i;
+
+ for (i = 0; i < numslots; i++)
+ {
+ if (!consumeQueryResult((slots + i)->connection))
+ return false;
+ }
+
+ return true;
+}
diff --git a/src/bin/scripts/scripts_parallel.h b/src/bin/scripts/scripts_parallel.h
new file mode 100644
index 0000000..c9d9f06
--- /dev/null
+++ b/src/bin/scripts/scripts_parallel.h
@@ -0,0 +1,36 @@
+/*-------------------------------------------------------------------------
+ *
+ * scripts_parallel.h
+ * Parallel support for bin/scripts/
+ *
+ * Copyright (c) 2003-2020, PostgreSQL Global Development Group
+ *
+ * src/bin/scripts/scripts_parallel.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef SCRIPTS_PARALLEL_H
+#define SCRIPTS_PARALLEL_H
+
+#include "common.h"
+#include "libpq-fe.h"
+
+
+typedef struct ParallelSlot
+{
+ PGconn *connection; /* One connection */
+ bool isFree; /* Is it known to be idle? */
+} ParallelSlot;
+
+extern ParallelSlot *ParallelSlotsGetIdle(ParallelSlot *slots, int numslots);
+
+extern ParallelSlot *ParallelSlotsSetup(const ConnParams *cparams,
+ const char *progname, bool echo,
+ PGconn *conn, int numslots);
+
+extern void ParallelSlotsTerminate(ParallelSlot *slots, int numslots);
+
+extern bool ParallelSlotsWaitCompletion(ParallelSlot *slots, int numslots);
+
+
+#endif /* SCRIPTS_PARALLEL_H */
diff --git a/src/bin/scripts/t/010_clusterdb.pl b/src/bin/scripts/t/010_clusterdb.pl
new file mode 100644
index 0000000..ba093fa
--- /dev/null
+++ b/src/bin/scripts/t/010_clusterdb.pl
@@ -0,0 +1,33 @@
+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..efd541b
--- /dev/null
+++ b/src/bin/scripts/t/011_clusterdb_all.pl
@@ -0,0 +1,19 @@
+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..983dbb1
--- /dev/null
+++ b/src/bin/scripts/t/020_createdb.pl
@@ -0,0 +1,50 @@
+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..916d925
--- /dev/null
+++ b/src/bin/scripts/t/040_createuser.pl
@@ -0,0 +1,34 @@
+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..c51babe
--- /dev/null
+++ b/src/bin/scripts/t/050_dropdb.pl
@@ -0,0 +1,29 @@
+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..2e858c5
--- /dev/null
+++ b/src/bin/scripts/t/070_dropuser.pl
@@ -0,0 +1,23 @@
+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..6da89e1
--- /dev/null
+++ b/src/bin/scripts/t/080_pg_isready.pl
@@ -0,0 +1,20 @@
+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;
+
+# use a long timeout for the benefit of very slow buildfarm machines
+$node->command_ok([qw(pg_isready --timeout=60)],
+ '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..d02cca7
--- /dev/null
+++ b/src/bin/scripts/t/090_reindexdb.pl
@@ -0,0 +1,121 @@
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 44;
+
+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';
+
+$node->issues_sql_like(
+ [ 'reindexdb', 'postgres' ],
+ qr/statement: REINDEX DATABASE postgres;/,
+ 'SQL REINDEX run');
+
+$node->safe_psql('postgres',
+ 'CREATE TABLE test1 (a int); CREATE INDEX test1x ON test1 (a);');
+$node->issues_sql_like(
+ [ 'reindexdb', '-t', 'test1', 'postgres' ],
+ qr/statement: REINDEX TABLE public\.test1;/,
+ 'reindex specific table');
+$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');
+
+# 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');
+
+# 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..8e60414
--- /dev/null
+++ b/src/bin/scripts/t/091_reindexdb_all.pl
@@ -0,0 +1,16 @@
+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..b136bd4
--- /dev/null
+++ b/src/bin/scripts/t/100_vacuumdb.pl
@@ -0,0 +1,124 @@
+use strict;
+use warnings;
+
+use PostgresNode;
+use TestLib;
+use Test::More tests => 49;
+
+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', '-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..4321258
--- /dev/null
+++ b/src/bin/scripts/t/101_vacuumdb_all.pl
@@ -0,0 +1,14 @@
+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..17a7fc7
--- /dev/null
+++ b/src/bin/scripts/t/102_vacuumdb_stages.pl
@@ -0,0 +1,35 @@
+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..ee2523d
--- /dev/null
+++ b/src/bin/scripts/t/200_connstr.pl
@@ -0,0 +1,39 @@
+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..1cf689c
--- /dev/null
+++ b/src/bin/scripts/vacuumdb.c
@@ -0,0 +1,944 @@
+/*-------------------------------------------------------------------------
+ *
+ * vacuumdb
+ *
+ * Portions Copyright (c) 1996-2020, 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/simple_list.h"
+#include "fe_utils/string_utils.h"
+#include "scripts_parallel.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 */
+} vacuumingOptions;
+
+
+static void vacuum_one_database(const 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},
+ {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 to all false */
+ memset(&vacopts, 0, sizeof(vacopts));
+ vacopts.parallel_workers = -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, "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;
+ 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);
+ }
+ /* 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);
+ }
+ }
+
+ /* 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(const 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;
+ ParallelSlot *slots;
+ SimpleStringList dbtables = {NULL, NULL};
+ int i;
+ int ntups;
+ bool failed = false;
+ bool parallel = concurrentCons > 1;
+ bool tables_listed = false;
+ bool has_where = false;
+ 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->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);
+
+ /*
+ * If there are more connections than vacuumable relations, we don't need
+ * to use them all.
+ */
+ if (parallel)
+ {
+ if (concurrentCons > ntups)
+ concurrentCons = ntups;
+ if (concurrentCons <= 1)
+ parallel = false;
+ }
+
+ /*
+ * 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.
+ */
+ if (concurrentCons <= 0)
+ concurrentCons = 1;
+
+ slots = ParallelSlotsSetup(cparams, progname, echo, conn, concurrentCons);
+
+ /*
+ * Prepare all the connections to run the appropriate analyze stage, if
+ * caller requested that mode.
+ */
+ if (stage != ANALYZE_NO_STAGE)
+ {
+ int j;
+
+ /* We already emitted the message above */
+
+ for (j = 0; j < concurrentCons; j++)
+ executeCommand((slots + j)->connection,
+ stage_commands[stage], echo);
+ }
+
+ initPQExpBuffer(&sql);
+
+ cell = dbtables.head;
+ do
+ {
+ const char *tabname = cell->val;
+ ParallelSlot *free_slot;
+
+ if (CancelRequested)
+ {
+ failed = true;
+ goto finish;
+ }
+
+ free_slot = ParallelSlotsGetIdle(slots, concurrentCons);
+ 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.
+ */
+ run_vacuum_command(free_slot->connection, sql.data,
+ echo, tabname);
+
+ cell = cell->next;
+ } while (cell != NULL);
+
+ if (!ParallelSlotsWaitCompletion(slots, concurrentCons))
+ failed = true;
+
+finish:
+ ParallelSlotsTerminate(slots, concurrentCons);
+ pg_free(slots);
+
+ 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->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(_(" -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(_(" -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);
+}