diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index 957796b8bdd72d918618a98f6d78f45b1292544e..c384fa8756eaf0a418302a1838fa7cca6785a302 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.55 2001/04/03 08:52:59 pjw Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.56 2001/06/27 21:21:36 petere Exp $
  *
  * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
  *
@@ -31,7 +31,9 @@
  *-------------------------------------------------------------------------
  */
 
+#include "postgres_fe.h"
 #include "pg_dump.h"
+#include "pg_backup_archiver.h"
 
 #include <ctype.h>
 
@@ -44,7 +46,7 @@ static char **findParentsByOid(TableInfo *tbinfo, int numTables,
 				 InhInfo *inhinfo, int numInherits,
 				 const char *oid,
 				 int *numParents,
-				 int (**parentIndices)[]);
+				 int (**parentIndexes)[]);
 static int	findTableByOid(TableInfo *tbinfo, int numTables, const char *oid);
 static void flagInhAttrs(TableInfo *tbinfo, int numTables,
 			 InhInfo *inhinfo, int numInherits);
@@ -116,8 +118,7 @@ findOprByOid(OprInfo *oprinfo, int numOprs, const char *oid)
 	}
 
 	/* should never get here */
-	fprintf(stderr, "failed sanity check, opr with oid %s was not found\n",
-			oid);
+	write_msg(NULL, "failed sanity check, operator with oid %s not found\n", oid);
 
 	/* no suitable operator name was found */
 	return (NULL);
@@ -127,7 +128,7 @@ findOprByOid(OprInfo *oprinfo, int numOprs, const char *oid)
 /*
  * findParentsByOid
  *	  given the oid of a class, return the names of its parent classes
- * and assign the number of parents, and parent indices to the last arguments.
+ * and assign the number of parents, and parent indexes to the last arguments.
  *
  *
  * returns NULL if none
@@ -136,7 +137,7 @@ findOprByOid(OprInfo *oprinfo, int numOprs, const char *oid)
 static char **
 findParentsByOid(TableInfo *tblinfo, int numTables,
 				 InhInfo *inhinfo, int numInherits, const char *oid,
-				 int *numParentsPtr, int (**parentIndices)[])
+				 int *numParentsPtr, int (**parentIndexes)[])
 {
 	int			i,
 				j;
@@ -157,7 +158,7 @@ findParentsByOid(TableInfo *tblinfo, int numTables,
 	if (numParents > 0)
 	{
 		result = (char **) malloc(sizeof(char *) * numParents);
-		(*parentIndices) = malloc(sizeof(int) * numParents);
+		(*parentIndexes) = malloc(sizeof(int) * numParents);
 		j = 0;
 		for (i = 0; i < numInherits; i++)
 		{
@@ -168,14 +169,19 @@ findParentsByOid(TableInfo *tblinfo, int numTables,
 				if (parentInd < 0)
 				{
 					selfInd = findTableByOid(tblinfo, numTables, oid);
-					fprintf(stderr,
-							"failed sanity check, parent oid %s of table %s (oid %s) was not found\n",
-							inhinfo[i].inhparent,
-						  (selfInd >= 0) ? tblinfo[selfInd].relname : "",
-							oid);
+					if (selfInd >= 0)
+						write_msg(NULL, "failed sanity check, parent oid %s of table %s (oid %s) not found\n",
+								   inhinfo[i].inhparent,
+								   tblinfo[selfInd].relname,
+								   oid);
+					else
+						write_msg(NULL, "failed sanity check, parent oid %s of table (oid %s) not found\n",
+								   inhinfo[i].inhparent,
+								   oid);
+
 					exit(2);
 				}
-				(**parentIndices)[j] = parentInd;
+				(**parentIndexes)[j] = parentInd;
 				result[j++] = tblinfo[parentInd].relname;
 			}
 		}
@@ -183,7 +189,7 @@ findParentsByOid(TableInfo *tblinfo, int numTables,
 	}
 	else
 	{
-		(*parentIndices) = NULL;
+		(*parentIndexes) = NULL;
 		return NULL;
 	}
 }
@@ -212,7 +218,7 @@ parseNumericArray(const char *str, char **array, int arraysize)
 			{
 				if (argNum >= arraysize)
 				{
-					fprintf(stderr, "parseNumericArray: too many numbers\n");
+					write_msg(NULL, "parseNumericArray: too many numbers\n");
 					exit(2);
 				}
 				temp[j] = '\0';
@@ -227,7 +233,7 @@ parseNumericArray(const char *str, char **array, int arraysize)
 			if (!(isdigit((unsigned char) s) || s == '-') ||
 				j >= sizeof(temp) - 1)
 			{
-				fprintf(stderr, "parseNumericArray: bogus number\n");
+				write_msg(NULL, "parseNumericArray: bogus number\n");
 				exit(2);
 			}
 			temp[j++] = s;
@@ -281,7 +287,7 @@ dumpSchema(Archive *fout,
 	int			numInherits;
 	int			numAggregates;
 	int			numOperators;
-	int			numIndices;
+	int			numIndexes;
 	TypeInfo   *tinfo = NULL;
 	FuncInfo   *finfo = NULL;
 	AggInfo    *agginfo = NULL;
@@ -316,9 +322,9 @@ dumpSchema(Archive *fout,
 	tblinfo = getTables(&numTables, finfo, numFuncs);
 
 	if (g_verbose)
-		fprintf(stderr, "%s reading indices information %s\n",
+		fprintf(stderr, "%s reading indexes information %s\n",
 				g_comment_start, g_comment_end);
-	indinfo = getIndices(&numIndices);
+	indinfo = getIndexes(&numIndexes);
 
 	if (g_verbose)
 		fprintf(stderr, "%s reading table inheritance information %s\n",
@@ -355,15 +361,15 @@ dumpSchema(Archive *fout,
 		fprintf(stderr, "%s dumping out tables %s\n",
 				g_comment_start, g_comment_end);
 
-	dumpTables(fout, tblinfo, numTables, indinfo, numIndices, inhinfo, numInherits,
+	dumpTables(fout, tblinfo, numTables, indinfo, numIndexes, inhinfo, numInherits,
 	   tinfo, numTypes, tablename, aclsSkip, oids, schemaOnly, dataOnly);
 
 	if (fout && !dataOnly)
 	{
 		if (g_verbose)
-			fprintf(stderr, "%s dumping out indices %s\n",
+			fprintf(stderr, "%s dumping out indexes %s\n",
 					g_comment_start, g_comment_end);
-		dumpIndices(fout, indinfo, numIndices, tblinfo, numTables, tablename);
+		dumpIndexes(fout, indinfo, numIndexes, tblinfo, numTables, tablename);
 	}
 
 	if (!tablename && !dataOnly)
@@ -404,7 +410,7 @@ dumpSchema(Archive *fout,
 	clearTypeInfo(tinfo, numTypes);
 	clearFuncInfo(finfo, numFuncs);
 	clearInhInfo(inhinfo, numInherits);
-	clearIndInfo(indinfo, numIndices);
+	clearIndInfo(indinfo, numIndexes);
 	return tblinfo;
 }
 
@@ -426,7 +432,7 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
 				k;
 	int			parentInd;
 	int			inhAttrInd;
-	int			(*parentIndices)[];
+	int			(*parentIndexes)[];
 	bool		foundAttr; 		/* Attr was found in a parent */
 	bool		foundNotNull;	/* Attr was NOT NULL in a parent */
 	bool		defaultsMatch;	/* All non-empty defaults match */
@@ -451,7 +457,7 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
 												 inhinfo, numInherits,
 												 tblinfo[i].oid,
 												 &tblinfo[i].numParents,
-												 &parentIndices);
+												 &parentIndexes);
 
 		/*
 	     * For each attr, check the parent info: if no parent has
@@ -477,13 +483,13 @@ flagInhAttrs(TableInfo *tblinfo, int numTables,
 
 			for (k = 0; k < tblinfo[i].numParents; k++)
 			{
-				parentInd = (*parentIndices)[k];
+				parentInd = (*parentIndexes)[k];
 
 				if (parentInd < 0)
 				{
 					/* shouldn't happen unless findParentsByOid is broken */
-					fprintf(stderr, "failed sanity check, table %s not found by flagInhAttrs\n",
-							tblinfo[i].parentRels[k]);
+					write_msg(NULL, "failed sanity check, table \"%s\" not found by flagInhAttrs\n",
+							  tblinfo[i].parentRels[k]);
 					exit(2);
 				};
 
diff --git a/src/bin/pg_dump/de.po b/src/bin/pg_dump/de.po
new file mode 100644
index 0000000000000000000000000000000000000000..1d357cf085618b1dc6c841af0a1fb7cd94f1b3c1
--- /dev/null
+++ b/src/bin/pg_dump/de.po
@@ -0,0 +1,1359 @@
+# German message translation file for pg_dump and friends
+# Peter Eisentraut <peter_e@gmx.net>, 2001.
+#
+# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/de.po,v 1.1 2001/06/27 21:21:37 petere Exp $
+#
+# Use these quotes: �%s�
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: pg_dump (PostgreSQL) 7.2\n"
+"POT-Creation-Date: 2001-06-27 21:58+0200\n"
+"PO-Revision-Date: 2001-06-27 22:02+0200\n"
+"Last-Translator: Peter Eisentraut <peter_e@gmx.net>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: pg_dump.c:243
+#, c-format
+msgid ""
+"%s dumps a database as a text file or to other formats.\n"
+"\n"
+msgstr ""
+
+#: pg_dump.c:244
+msgid "Usage:"
+msgstr "Benutzung:"
+
+#: pg_dump.c:245
+#, c-format
+msgid ""
+"  %s [options] dbname\n"
+"\n"
+msgstr ""
+"  %s [Optionen] DB-Name\n"
+"\n"
+
+#: pg_dump.c:246
+msgid "Options:"
+msgstr "Optionen:"
+
+#: pg_dump.c:250
+msgid ""
+"  -a, --data-only          dump only the data, not the schema\n"
+"  -b, --blobs              include BLOB data in dump\n"
+"  -c, --clean              clean (drop) schema prior to create\n"
+"  -C, --create             include commands to create database in dump\n"
+"  -d, --inserts            dump data as INSERT, rather than COPY, commands\n"
+"  -D, --attribute-inserts  dump data as INSERT commands with column names\n"
+"  -f, --file=FILENAME      output file name\n"
+"  -F, --format {c|t|p}     output file format (custom, tar, plain text)\n"
+"  -h, --host=HOSTNAME      database server host name\n"
+"  -i, --ignore-version     proceed even when server version mismatches\n"
+"                           pg_dump version\n"
+"  -n, --no-quotes          suppress most quotes around identifiers\n"
+"  -N, --quotes             enable most quotes around identifiers\n"
+"  -o, --oids               include oids in dump\n"
+"  -O, --no-owner           do not output \\connect commands in plain\n"
+"                           text format\n"
+"  -p, --port=PORT          database server port number\n"
+"  -R, --no-reconnect       disable ALL reconnections to the database in\n"
+"                           plain text format\n"
+"  -s, --schema-only        dump only the schema, no data\n"
+"  -S, --superuser=NAME     specify the superuser user name to use in\n"
+"                           plain text format\n"
+"  -t, --table=TABLE        dump this table only (* for all)\n"
+"  -U, --username=NAME      connect as specified database user\n"
+"  -v, --verbose            verbose mode\n"
+"  -W, --password           force password prompt (should happen "
+"automatically)\n"
+"  -x, --no-acl             do not dump privileges (grant/revoke)\n"
+"  -Z, --compress {0-9}     compression level for compressed formats\n"
+msgstr ""
+
+#: pg_dump.c:281
+msgid ""
+"  -a                       dump only the data, not the schema\n"
+"  -b                       include BLOB data in dump\n"
+"  -c                       clean (drop) schema prior to create\n"
+"  -C                       include commands to create database in dump\n"
+"  -d                       dump data as INSERT, rather than COPY, commands\n"
+"  -D                       dump data as INSERT commands with column names\n"
+"  -f FILENAME              output file name\n"
+"  -F {c|t|p}               output file format (custom, tar, plain text)\n"
+"  -h HOSTNAME              database server host name\n"
+"  -i                       proceed even when server version mismatches\n"
+"                           pg_dump version\n"
+"  -n                       suppress most quotes around identifiers\n"
+"  -N                       enable most quotes around identifiers\n"
+"  -o                       include oids in dump\n"
+"  -O                       do not output \\connect commands in plain\n"
+"                           text format\n"
+"  -p PORT                  database server port number\n"
+"  -R                       disable ALL reconnections to the database in\n"
+"                           plain text format\n"
+"  -s                       dump only the schema, no data\n"
+"  -S NAME                  specify the superuser user name to use in\n"
+"                           plain text format\n"
+"  -t TABLE                 dump this table only (* for all)\n"
+"  -U NAME                  connect as specified database user\n"
+"  -v                       verbose mode\n"
+"  -W                       force password prompt (should happen "
+"automatically)\n"
+"  -x                       do not dump privileges (grant/revoke)\n"
+"  -Z {0-9}                 compression level for compressed formats\n"
+msgstr ""
+
+#: pg_dump.c:311
+msgid ""
+"If no database name is not supplied, then the PGDATABASE environment\n"
+"variable value is used.\n"
+"\n"
+"Report bugs to <pgsql-bugs@postgresql.org>."
+msgstr ""
+"Wenn kein Datenbankname angegeben wird, dann wird die Umgebungsvariable\n"
+"PGDATABASE verwendet.\n"
+"\n"
+"Berichten Sie Fehler an <pgsql-bugs@postgresql.org>."
+
+#: pg_dump.c:380
+#, c-format
+msgid "SQL command to dump the contents of table \"%s\" failed\n"
+msgstr ""
+
+#: pg_dump.c:382 pg_dump.c:478 pg_dump.c:511 pg_dump.c:1183
+#, c-format
+msgid "Error message from server: %s"
+msgstr "Fehlermeldung vom Server: %s"
+
+#: pg_dump.c:383 pg_dump.c:394 pg_dump.c:479 pg_dump.c:512 pg_dump.c:1184
+#, c-format
+msgid "The command was: %s\n"
+msgstr "Die Anweisung war: %s\n"
+
+#: pg_dump.c:390
+#, c-format
+msgid "SQL command to dump the contents of table \"%s\" executed abnormally.\n"
+msgstr ""
+
+#: pg_dump.c:392
+#, c-format
+msgid "The server returned status %d when %d was expected.\n"
+msgstr "Der Server gab Status %d zur�ck, aber %d wurde erwartet.\n"
+
+#: pg_dump.c:477
+#, c-format
+msgid ""
+"SQL command to dump the contents of table \"%s\" failed: PQendcopy() "
+"failed.\n"
+msgstr ""
+
+#: pg_dump.c:510
+msgid "dumpClasses(): SQL command failed\n"
+msgstr "dumpClasses(): SQL-Anweisung schlug fehl\n"
+
+#: pg_dump.c:924 pg_restore.c:251
+msgid "Username: "
+msgstr "Benutzername: "
+
+#: pg_dump.c:955
+#, c-format
+msgid ""
+"%s was compiled without support for long options.\n"
+"Use --help for help on invocation options.\n"
+msgstr ""
+"%s wurde ohne Unterst�tzung f�r lange Optionen kompiliert.\n"
+"Verwenden Sie --help f�r Hilfe.\n"
+
+#: pg_dump.c:962 pg_restore.c:270
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Versuchen Sie �%s --help� f�r weitere Informationen.\n"
+
+#: pg_dump.c:970
+#, c-format
+msgid ""
+"%s: too many command line options (first is '%s')\n"
+"Try '%s --help' for more information.\n"
+msgstr ""
+"%s: zu Viele Kommandozeilenoptionen (die Erste ist �%s�)\n"
+"Versuchen Sie �%s --help� f�r weitere Informationen.\n"
+
+#: pg_backup_db.c:353 pg_dump.c:983
+msgid "no database name specified\n"
+msgstr "kein Datenbankname angegeben\n"
+
+#: pg_dump.c:989
+msgid "'Schema only' and 'data only' are incompatible options.\n"
+msgstr ""
+
+#: pg_dump.c:995
+msgid "BLOB output is not supported for a single table.\n"
+msgstr ""
+
+#: pg_dump.c:996
+msgid "Use all tables or a full dump instead.\n"
+msgstr ""
+
+#: pg_dump.c:1002
+msgid "INSERT (-d, -D) and OID (-o) options cannot be used together.\n"
+msgstr ""
+"Die Optionen INSERT (-d, -D) und OID (-o) k�nnen nicht zusammen verwendet "
+"werden.\n"
+
+#: pg_dump.c:1003
+msgid "(The INSERT command cannot set oids.)\n"
+msgstr "(Die INSERT-Anweisung kann Oids nicht setzen.)\n"
+
+#: pg_dump.c:1009
+msgid "BLOB output is not supported for plain text dump files.\n"
+msgstr ""
+
+#: pg_dump.c:1010
+msgid "(Use a different output format.)\n"
+msgstr ""
+
+#: pg_dump.c:1040
+#, c-format
+msgid "invalid output format '%s' specified\n"
+msgstr "ung�ltiges Ausgabeformat �%s� angegeben\n"
+
+#: pg_dump.c:1046
+#, c-format
+msgid "could not open output file %s for writing\n"
+msgstr "konnte Ausgabedatei %s nicht zum Schreiben �ffnen\n"
+
+#: pg_dump.c:1069
+#, c-format
+msgid "BEGIN command failed: %s"
+msgstr "BEGIN-Anweisung schlug fehl: %s"
+
+#: pg_dump.c:1075
+#, c-format
+msgid "could not set transaction isolation level to serializable: %s"
+msgstr ""
+
+#: pg_dump.c:1182
+msgid "SQL command failed\n"
+msgstr "SQL-Anweisung schlug fehl\n"
+
+#: pg_dump.c:1192
+#, c-format
+msgid "missing pg_database entry for database \"%s\"\n"
+msgstr "fehlender pg_database-Eintrag f�r Datenbank �%s�\n"
+
+#: pg_dump.c:1198
+#, c-format
+msgid ""
+"query returned more than one (%d) pg_database entry for database \"%s\"\n"
+msgstr ""
+
+#: pg_dump.c:1253
+#, c-format
+msgid "dumpBlobs(): cursor declaration failed: %s"
+msgstr ""
+
+#: pg_dump.c:1268
+#, c-format
+msgid "dumpBlobs(): fetch from cursor failed: %s"
+msgstr ""
+
+#: pg_dump.c:1281
+#, c-format
+msgid "dumpBlobs(): could not open large object: %s"
+msgstr ""
+
+#: pg_dump.c:1294
+#, c-format
+msgid "dumpBlobs(): error reading large object: %s"
+msgstr ""
+
+#: pg_dump.c:1379
+#, c-format
+msgid "query to obtain list of data types failed: %s"
+msgstr ""
+
+#: pg_dump.c:1423
+#, c-format
+msgid "WARNING: owner of data type %s appears to be invalid\n"
+msgstr "WARNUNG: Eigent�mer des Datentypen %s scheint ung�ltig zu sein\n"
+
+#: pg_dump.c:1497
+#, c-format
+msgid "query to obtain list of operators failed: %s"
+msgstr ""
+
+#: pg_dump.c:1539
+#, c-format
+msgid "WARNING: owner of operator \"%s\" appears to be invalid\n"
+msgstr "WARNUNG: Eigent�mer des Operatoren �%s� scheint ung�ltig zu sein\n"
+
+#: pg_dump.c:1861
+#, c-format
+msgid "query to obtain list of aggregate functions failed: %s\n"
+msgstr ""
+
+#: pg_dump.c:1892
+#, c-format
+msgid "WARNING: owner of aggregate function \"%s\" appears to be invalid\n"
+msgstr ""
+
+#: pg_dump.c:1962
+#, c-format
+msgid "query to obtain list of functions failed: %s"
+msgstr "Abfrage um Liste der Funktionen zu ermitteln schlug fehl: %s"
+
+#: pg_dump.c:2005
+#, c-format
+msgid "WARNING: owner of function \"%s\" appears to be invalid\n"
+msgstr ""
+
+#: pg_dump.c:2010
+#, c-format
+msgid ""
+"failed sanity check: function %s has more than %d (namely %d) arguments\n"
+msgstr ""
+
+#: pg_dump.c:2105
+#, c-format
+msgid "query to obtain list of tables failed: %s"
+msgstr "Abfrage um Liste der Tabellen zu ermitteln schlug fehl: %s"
+
+#: pg_dump.c:2136
+#, c-format
+msgid "WARNING: owner of table \"%s\" appears to be invalid\n"
+msgstr ""
+
+#: pg_dump.c:2156
+#, c-format
+msgid "query to obtain definition of view \"%s\" failed: %s"
+msgstr ""
+
+#: pg_dump.c:2164
+#, c-format
+msgid "query to obtain definition of view \"%s\" returned no data\n"
+msgstr ""
+
+#: pg_dump.c:2167
+#, c-format
+msgid ""
+"query to obtain definition of view \"%s\" returned more than one definition\n"
+msgstr ""
+
+#: pg_dump.c:2174
+#, c-format
+msgid "query to obtain definition of view \"%s\" returned NULL oid\n"
+msgstr ""
+
+#: pg_dump.c:2184
+#, c-format
+msgid "definition of view \"%s\" appears to be empty (length zero)\n"
+msgstr ""
+
+#: pg_dump.c:2232
+#, c-format
+msgid "query to obtain check constraints failed: %s"
+msgstr ""
+
+#: pg_dump.c:2238
+#, c-format
+msgid "expected %d check constraints on table \"%s\" but found %d\n"
+msgstr ""
+
+#: pg_dump.c:2240
+msgid "(The system catalogs might be corrupted.)\n"
+msgstr ""
+
+#: pg_dump.c:2281
+#, c-format
+msgid "query to obtain primary key of table \"%s\" failed: %s"
+msgstr ""
+
+#: pg_dump.c:2288
+#, c-format
+msgid ""
+"query to obtain primary key of table \"%s\" produced more than one result\n"
+msgstr ""
+
+#: pg_dump.c:2338
+#, c-format
+msgid "query to obtain name of primary key of table \"%s\" failed: %s"
+msgstr ""
+
+#: pg_dump.c:2346
+#, c-format
+msgid ""
+"query to obtain name of primary key of table \"%s\" did not return exactly "
+"one result\n"
+msgstr ""
+
+#: pg_dump.c:2354
+#, c-format
+msgid "name of primary key of table \"%s\" returned NULL value\n"
+msgstr ""
+
+#: pg_backup_archiver.c:620 pg_backup_archiver.c:1030
+#: pg_backup_archiver.c:1150 pg_backup_archiver.c:1436
+#: pg_backup_archiver.c:1578 pg_backup_archiver.c:1607 pg_backup_custom.c:149
+#: pg_backup_custom.c:154 pg_backup_custom.c:169 pg_backup_custom.c:564
+#: pg_backup_db.c:284 pg_backup_db.c:376 pg_backup_tar.c:992 pg_dump.c:2363
+msgid "out of memory\n"
+msgstr "Speicher aufgebraucht\n"
+
+#: pg_dump.c:2409
+#, c-format
+msgid "query to obtain list of triggers failed: %s"
+msgstr ""
+
+#: pg_dump.c:2415
+#, c-format
+msgid "expected %d triggers on table \"%s\" but found %d\n"
+msgstr ""
+
+#: pg_dump.c:2495
+#, c-format
+msgid "query to obtain procedure name for trigger \"%s\" failed: %s"
+msgstr ""
+
+#: pg_dump.c:2504
+#, c-format
+msgid ""
+"query to obtain procedure name for trigger \"%s\" did not return exactly one "
+"result\n"
+msgstr ""
+
+#: pg_dump.c:2567
+#, c-format
+msgid ""
+"query produced NULL referenced table name for trigger \"%s\" on table \"%s"
+"\" (oid was %s)\n"
+msgstr ""
+
+#: pg_dump.c:2597
+#, c-format
+msgid "bad argument string (%s) for trigger \"%s\" on table \"%s\"\n"
+msgstr ""
+
+#: pg_dump.c:2685
+#, c-format
+msgid "query to obtain inheritance relationships failed: %s"
+msgstr ""
+
+#: pg_dump.c:2788
+#, c-format
+msgid "query to get table columns failed: %s"
+msgstr ""
+
+#: pg_dump.c:2820
+#, c-format
+msgid "query produced NULL name for data type of column %d of table %s\n"
+msgstr ""
+
+#: pg_dump.c:2855
+#, c-format
+msgid "query to get column default value failed: %s"
+msgstr ""
+
+#: pg_dump.c:2864
+#, c-format
+msgid ""
+"query to get default value for column \"%s\" returned %d rows; expected 1\n"
+msgstr ""
+
+#: pg_dump.c:2937
+#, c-format
+msgid "query to obtain list of indexes failed: %s"
+msgstr ""
+
+#: pg_dump.c:3017
+#, c-format
+msgid "query to get comment on oid %s failed: %s"
+msgstr ""
+
+#: pg_dump.c:3072
+#, c-format
+msgid "query to get database oid failed: %s"
+msgstr ""
+
+#: pg_dump.c:3172
+#, c-format
+msgid "Notice: array type %s - type for elements (oid %s) is not dumped.\n"
+msgstr ""
+
+#: pg_dump.c:3239
+#, c-format
+msgid "query to obtain list of procedural languages failed: %s"
+msgstr ""
+
+#: pg_dump.c:3267
+#, c-format
+msgid "handler procedure for procedural language %s not found\n"
+msgstr ""
+
+#: pg_dump.c:3357
+#, c-format
+msgid "query to get name of procedural language failed: %s"
+msgstr ""
+
+#: pg_dump.c:3364
+#, c-format
+msgid "procedural language for function %s not found\n"
+msgstr ""
+
+#: pg_dump.c:3406 pg_dump.c:3435
+#, c-format
+msgid "Notice: function \"%s\" not dumped\n"
+msgstr ""
+
+#: pg_dump.c:3409
+#, c-format
+msgid "Reason: data type name of argument %d (oid %s) not found\n"
+msgstr ""
+
+#: pg_dump.c:3438
+#, c-format
+msgid "Reason: name of return data type (oid %s) not found\n"
+msgstr ""
+
+#: pg_dump.c:4108
+#, c-format
+msgid ""
+"dumpTables(): failed sanity check, could not find index (%s) for primary key "
+"constraint\n"
+msgstr ""
+
+#: pg_dump.c:4232
+#, c-format
+msgid "getAttrName(): invalid column number %d for table %s\n"
+msgstr ""
+
+#: pg_dump.c:4268
+#, c-format
+msgid "dumpIndexes(): failed sanity check, table %s was not found\n"
+msgstr ""
+
+#: pg_dump.c:4322
+#, c-format
+msgid "query to get function name of oid %s failed: %s"
+msgstr ""
+
+#: pg_dump.c:4331
+#, c-format
+msgid "query to get function name of oid %s returned %d rows; expected 1\n"
+msgstr ""
+
+#: pg_dump.c:4356
+#, c-format
+msgid "query to get operator class name of oid %u failed: %s"
+msgstr ""
+
+#: pg_dump.c:4365
+#, c-format
+msgid ""
+"query to get operator class name of oid %u returned %d rows; expected 1\n"
+msgstr ""
+
+#: pg_dump.c:4376
+#, c-format
+msgid "There must be exactly one OpClass for functional index \"%s\".\n"
+msgstr ""
+
+#: pg_dump.c:4400
+#, c-format
+msgid "no operator class found for column \"%s\" of index \"%s\"\n"
+msgstr ""
+
+#: pg_dump.c:4542
+#, c-format
+msgid "could not create pgdump_oid table: %s"
+msgstr ""
+
+#: pg_dump.c:4550
+#, c-format
+msgid "could not insert into pgdump_oid table: %s"
+msgstr ""
+
+#: pg_dump.c:4556
+msgid "inserted invalid oid\n"
+msgstr ""
+
+#: pg_dump.c:4564
+#, c-format
+msgid "could not drop pgdump_oid table: %s"
+msgstr ""
+
+#: pg_dump.c:4604
+#, c-format
+msgid "error in finding the last system oid: %s"
+msgstr ""
+
+#: pg_dump.c:4610
+msgid "missing pg_database entry for this database\n"
+msgstr ""
+
+#: pg_dump.c:4615
+msgid "found more than one pg_database entry for this database\n"
+msgstr ""
+
+#: pg_dump.c:4642
+#, c-format
+msgid "error in finding the template1 database: %s"
+msgstr ""
+
+#: pg_dump.c:4648
+msgid "could not find template1 database entry in the pg_database table\n"
+msgstr ""
+
+#: pg_dump.c:4653
+msgid "found more than one template1 database entry in the pg_database table\n"
+msgstr ""
+
+#: pg_dump.c:4684
+#, c-format
+msgid "query to get data of sequence \"%s\" failed: %s"
+msgstr ""
+
+#: pg_dump.c:4690
+#, c-format
+msgid "query to get data of sequence \"%s\" returned %d rows (expected 1)\n"
+msgstr ""
+
+#: pg_dump.c:4697
+#, c-format
+msgid "query to get data of sequence \"%s\" returned name \"%s\"\n"
+msgstr ""
+
+#: pg_dump.c:4840
+#, c-format
+msgid "query to get rules associated with table \"%s\" failed: %s"
+msgstr ""
+
+#: common.c:121
+#, c-format
+msgid "failed sanity check, operator with oid %s not found\n"
+msgstr ""
+
+#: common.c:173
+#, c-format
+msgid "failed sanity check, parent oid %s of table %s (oid %s) not found\n"
+msgstr ""
+
+#: common.c:178
+#, c-format
+msgid "failed sanity check, parent oid %s of table (oid %s) not found\n"
+msgstr ""
+
+#: common.c:221
+msgid "parseNumericArray: too many numbers\n"
+msgstr ""
+
+#: common.c:236
+msgid "parseNumericArray: bogus number\n"
+msgstr ""
+
+#: common.c:491
+#, c-format
+msgid "failed sanity check, table \"%s\" not found by flagInhAttrs\n"
+msgstr ""
+
+#: pg_backup_archiver.c:149
+msgid "could not close the output file in CloseArchive\n"
+msgstr ""
+
+#: pg_backup_archiver.c:166
+msgid "-C and -R are incompatible options\n"
+msgstr ""
+
+#: pg_backup_archiver.c:175
+msgid "direct database connections are not supported in pre-1.3 archives\n"
+msgstr ""
+
+#: pg_backup_archiver.c:227
+msgid ""
+"WARNING:\n"
+"  Data restoration may fail because existing triggers cannot be disabled\n"
+"  (no superuser user name specified).  This is only a problem when\n"
+"  restoring into a database with already existing triggers.\n"
+msgstr ""
+"WARNUNG:\n"
+"  Datenwiederherstellung k�nnte fehlschlagen, weil Trigger nicht "
+"abgeschaltet\n"
+"  werden k�nnen (kein Superuser-Name angegeben).  Das ist nur ein Problem,\n"
+"  wenn man die Wiederherstellung in eine Datenbank macht, die bereits "
+"Trigger\n"
+"  enth�lt.\n"
+
+#: pg_backup_archiver.c:275 pg_backup_archiver.c:277
+#, c-format
+msgid "warning from original dump file: %s\n"
+msgstr ""
+
+#: pg_backup_archiver.c:317
+msgid ""
+"unable to restore from compressed archive (not configured for compression "
+"support)\n"
+msgstr ""
+
+#: pg_backup_archiver.c:335
+msgid "WARNING: skipping BLOB restoration\n"
+msgstr ""
+
+#: pg_backup_archiver.c:595
+msgid ""
+"WriteData cannot be called outside the context of a DataDumper routine\n"
+msgstr ""
+
+#: pg_backup_archiver.c:715
+msgid "BLOB output not supported in chosen format\n"
+msgstr ""
+
+#: pg_backup_archiver.c:779
+msgid "cannot restore BLOBs without a database connection"
+msgstr ""
+
+#: pg_backup_archiver.c:798
+msgid "could not create BLOB\n"
+msgstr ""
+
+#: pg_backup_archiver.c:806
+msgid "could not open BLOB\n"
+msgstr ""
+
+#: pg_backup_archiver.c:946
+msgid "could not open TOC file\n"
+msgstr ""
+
+#: pg_backup_archiver.c:967
+#, c-format
+msgid "WARNING: line ignored: %s\n"
+msgstr "WARNUNG: Zeile ignoriert: %s\n"
+
+#: pg_backup_archiver.c:974
+#, c-format
+msgid "could not find entry for id %d\n"
+msgstr ""
+
+#: pg_backup_archiver.c:983 pg_backup_files.c:158 pg_backup_files.c:443
+#, c-format
+msgid "could not close TOC file: %s\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1099 pg_backup_files.c:132
+#, c-format
+msgid "could not open output file: %s\n"
+msgstr "konnte Ausgabedatei nicht �ffnen: %s\n"
+
+#: pg_backup_archiver.c:1115
+#, c-format
+msgid "could not close output file: %s\n"
+msgstr "konnte Ausgabedatei nicht schlie�en: %s\n"
+
+#: pg_backup_archiver.c:1198
+#, c-format
+msgid "could not write to large object (result: %d, expected: %d)\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1207
+msgid "could not write to compressed archive\n"
+msgstr "konnte nicht in komprimiertes Archiv schreiben\n"
+
+#: pg_backup_archiver.c:1215
+msgid "could not write to custom output routine\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1231
+#, c-format
+msgid "could not write to output file (%d != %d)\n"
+msgstr "konnte nicht in Ausgabedatei schreiben (%d != %d)\n"
+
+#: pg_backup_archiver.c:1454
+msgid "attempting to ascertain archive format\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1474 pg_backup_files.c:150
+#, c-format
+msgid "could not open input file: %s\n"
+msgstr "konnte Eingabedatei nicht �ffnen: %s\n"
+
+#: pg_backup_archiver.c:1481
+#, c-format
+msgid "could not read input file: %s\n"
+msgstr "konnte nicht aus Eingabedatei lesen: %s\n"
+
+#: pg_backup_archiver.c:1483
+#, c-format
+msgid "input file is too short (read %d, expected 5)\n"
+msgstr "Eingabedatei ist zu kurz (gelesen: %d, erwartet: 5)\n"
+
+#: pg_backup_archiver.c:1528
+msgid "input file does not appear to be a valid archive (too short?)\n"
+msgstr "Eingabedatei scheint kein g�ltiges Archiv zu sein (zu kurz?)\n"
+
+#: pg_backup_archiver.c:1531
+msgid "input file does not appear to be a valid archive\n"
+msgstr "Eingabedatei scheint kein g�ltiges Archiv zu sein\n"
+
+#: pg_backup_archiver.c:1550
+#, c-format
+msgid "read %d bytes into lookahead buffer\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1556
+#, c-format
+msgid "could not close the input file after reading header: %s\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1573
+#, c-format
+msgid "allocating AH for %s, format %d\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1623
+#, c-format
+msgid "archive format is %d\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1651
+#, c-format
+msgid "unrecognized file format '%d'\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1765
+msgid "failed sanity check (bad entry id) - perhaps a corrupt TOC\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1797
+#, c-format
+msgid "read dependency for %s -> %s\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1961
+msgid ""
+"WARNING: requested compression not available in this installation - archive "
+"will be uncompressed\n"
+msgstr ""
+
+#: pg_backup_archiver.c:1994
+msgid "did not find magic string in file header\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2008
+#, c-format
+msgid "unsupported version (%d.%d) in file header\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2013
+#, c-format
+msgid "sanity check on integer size (%d) failed\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2016
+msgid ""
+"WARNING: archive was made on a machine with larger integers, some operations "
+"may fail\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2021
+#, c-format
+msgid "expected format (%d) differs from format found in file (%d)\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2037
+msgid ""
+"WARNING: archive is compressed, but this installation does not support "
+"compression - no data will be available\n"
+msgstr ""
+
+#: pg_backup_archiver.c:2055
+msgid "WARNING: bad creation date in header\n"
+msgstr ""
+
+#: pg_backup_custom.c:183
+#, c-format
+msgid "could not open archive file %s: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:196
+#, c-format
+msgid "could not open archive file %s: %s"
+msgstr ""
+
+#: pg_backup_custom.c:389
+msgid "invalid OID for BLOB\n"
+msgstr ""
+
+#: pg_backup_custom.c:449
+msgid ""
+"Dumping a specific TOC data block out of order is not supported without id "
+"on this input stream (fseek required)\n"
+msgstr ""
+
+#: pg_backup_custom.c:468
+#, c-format
+msgid "unrecognized data block type (%d) while searching archive\n"
+msgstr ""
+
+#: pg_backup_custom.c:484
+#, c-format
+msgid "error during file seek: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:492
+#, c-format
+msgid "found unexpected block ID (%d) when reading data - expected %d\n"
+msgstr ""
+
+#: pg_backup_custom.c:506
+msgid "BLOBs cannot be loaded without a database connection\n"
+msgstr ""
+
+#: pg_backup_custom.c:513
+#, c-format
+msgid "unrecognized data block type %d while restoring archive\n"
+msgstr ""
+
+#: pg_backup_custom.c:550 pg_backup_custom.c:907
+#, c-format
+msgid "could not initialize compression library: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:572 pg_backup_custom.c:696
+#, c-format
+msgid "could not read data block - expected %d, got %d\n"
+msgstr ""
+
+#: pg_backup_custom.c:590 pg_backup_custom.c:622
+#, c-format
+msgid "unable to uncompress data: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:724
+#, c-format
+msgid "could not write byte: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:767 pg_backup_files.c:418
+#, c-format
+msgid "write error in _WriteBuf (%d != %d)\n"
+msgstr ""
+
+#: pg_backup_custom.c:837
+#, c-format
+msgid "could not close archive file: %s\n"
+msgstr ""
+
+#: pg_backup_custom.c:860
+msgid "WARNING: ftell mismatch with filePos - filePos used\n"
+msgstr ""
+
+#: pg_backup_custom.c:940
+#, c-format
+msgid "could not compress data: %s\n"
+msgstr "konnte Daten nicht komprimieren: %s\n"
+
+#: pg_backup_custom.c:962
+msgid "could not write compressed chunk\n"
+msgstr ""
+
+#: pg_backup_custom.c:976
+msgid "could not write uncompressed chunk\n"
+msgstr ""
+
+#: pg_backup_custom.c:1025
+#, c-format
+msgid "could not close compression stream: %s\n"
+msgstr ""
+
+#: pg_backup_db.c:131
+#, c-format
+msgid "unable to parse version string \"%s\"\n"
+msgstr ""
+
+#: pg_backup_db.c:156
+#, c-format
+msgid "could not get version from server: %s"
+msgstr "konnte Version des Servers nicht ermitteln: %s"
+
+#: pg_backup_db.c:168
+#, c-format
+msgid "server version: %s, %s version: %s\n"
+msgstr ""
+
+#: pg_backup_db.c:171
+msgid "proceeding despite version mismatch\n"
+msgstr ""
+
+#: pg_backup_db.c:173
+msgid ""
+"aborting because of version mismatch  (Use the -i option to proceed "
+"anyway.)\n"
+msgstr ""
+
+#: pg_backup_db.c:194
+#, c-format
+msgid "null result checking superuser status of %s\n"
+msgstr ""
+
+#: pg_backup_db.c:197
+#, c-format
+msgid "could not check superuser status of %s: %s"
+msgstr ""
+
+#: pg_backup_db.c:282 pg_backup_db.c:315 pg_backup_db.c:374 pg_backup_db.c:403
+msgid "Password: "
+msgstr "Pa�wort: "
+
+#: pg_backup_db.c:294
+msgid "failed to reconnect to database\n"
+msgstr ""
+
+#: pg_backup_db.c:318
+#, c-format
+msgid "could not reconnect to database: %s"
+msgstr ""
+
+#: pg_backup_db.c:350
+msgid "already connected to database\n"
+msgstr ""
+
+#: pg_backup_db.c:393
+msgid "failed to connect to database\n"
+msgstr ""
+
+#: pg_backup_db.c:412
+#, c-format
+msgid "connection to database \"%s\" failed: %s"
+msgstr ""
+
+#: pg_backup_db.c:452
+#, c-format
+msgid "%s: no result from backend\n"
+msgstr ""
+
+#: pg_backup_db.c:459
+msgid "COPY command executed in non-primary connection\n"
+msgstr ""
+
+#: pg_backup_db.c:464
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: pg_backup_db.c:547
+msgid "error returned by PQputline\n"
+msgstr ""
+
+#: pg_backup_db.c:559
+msgid "error returned by PQendcopy\n"
+msgstr ""
+
+#: pg_backup_db.c:608
+msgid "could not execute query"
+msgstr "konnte Abfrage nicht ausf�hren"
+
+#: pg_backup_db.c:698
+#, c-format
+msgid "could not find oid columns of table \"%s\": %s"
+msgstr ""
+
+#: pg_backup_db.c:733
+#, c-format
+msgid "could not update column \"%s\" of table \"%s\": %s"
+msgstr ""
+
+#: pg_backup_db.c:738
+#, c-format
+msgid "error while updating column \"%s\" of table \"%s\": %s"
+msgstr ""
+
+#: pg_backup_db.c:764
+msgid "could not create BLOB cross reference table"
+msgstr ""
+
+#: pg_backup_db.c:769
+msgid "could not create index on BLOB cross reference table"
+msgstr ""
+
+#: pg_backup_db.c:779
+msgid "could not create BLOB cross reference entry"
+msgstr ""
+
+#: pg_backup_db.c:789
+msgid "could not start database transaction"
+msgstr ""
+
+#: pg_backup_db.c:801
+msgid "could not start transaction for BLOB cross references"
+msgstr ""
+
+#: pg_backup_db.c:812
+msgid "could not commit database transaction"
+msgstr ""
+
+#: pg_backup_db.c:823
+msgid "could not commit transaction for BLOB cross references"
+msgstr ""
+
+#: pg_backup_files.c:122
+msgid ""
+"WARNING:\n"
+"  This format is for demonstration purposes, it is not intended for\n"
+"  normal use. Files will be written in the current working directory.\n"
+msgstr ""
+
+#: pg_backup_files.c:248
+msgid "could not open data file for output\n"
+msgstr "konnte Datendatei nicht zur Ausgabe �ffnen\n"
+
+#: pg_backup_files.c:269
+msgid "could not close data file\n"
+msgstr "konnte Datendatei nicht schlie�en\n"
+
+#: pg_backup_files.c:293
+msgid "could not open data file for input\n"
+msgstr "konnte Dateindatei nicht zur Eingabe �ffnen\n"
+
+#: pg_backup_files.c:302
+msgid "could not close data file after reading\n"
+msgstr "konnte Datendatei nach dem Lesen nicht schlie�en\n"
+
+#: pg_backup_files.c:366
+#, c-format
+msgid "could not open BLOB TOC for input: %s\n"
+msgstr ""
+
+#: pg_backup_files.c:379 pg_backup_files.c:550
+#, c-format
+msgid "could not close BLOB TOC file: %s\n"
+msgstr ""
+
+#: pg_backup_files.c:391
+msgid "could not write byte\n"
+msgstr ""
+
+#: pg_backup_files.c:477
+#, c-format
+msgid "could not open BLOB TOC for output: %s\n"
+msgstr ""
+
+#: pg_backup_files.c:498 pg_backup_tar.c:914
+#, c-format
+msgid "invalid OID for BLOB (%u)\n"
+msgstr ""
+
+#: pg_backup_files.c:517
+msgid "could not open BLOB file\n"
+msgstr ""
+
+#: pg_backup_files.c:532
+msgid "could not close BLOB file\n"
+msgstr ""
+
+#: pg_backup_null.c:66
+msgid "this format cannot be read\n"
+msgstr "dieses Format kann nicht gelesen werden\n"
+
+#: pg_backup_tar.c:176
+#, c-format
+msgid "could not open TOC file for output: %s\n"
+msgstr ""
+
+#: pg_backup_tar.c:201
+msgid "compression not supported by tar output format\n"
+msgstr ""
+
+#: pg_backup_tar.c:213
+#, c-format
+msgid "could not open TOC file for input: %s\n"
+msgstr ""
+
+#: pg_backup_tar.c:336
+#, c-format
+msgid "could not find file %s in archive\n"
+msgstr "konnte Datei %s nicht im Archiv finden\n"
+
+#: pg_backup_tar.c:347
+msgid "compression support is disabled in this format\n"
+msgstr ""
+
+#: pg_backup_tar.c:364
+#, c-format
+msgid "could not generate temporary file name: %s\n"
+msgstr ""
+
+#: pg_backup_tar.c:373
+msgid "could not gzdopen temporary file\n"
+msgstr ""
+
+#: pg_backup_tar.c:405
+msgid "could not close tar member\n"
+msgstr ""
+
+#: pg_backup_tar.c:506
+msgid "neither th nor fh specified in tarReadRaw() (internal error)\n"
+msgstr ""
+
+#: pg_backup_tar.c:510
+#, c-format
+msgid "requested %d bytes, got %d from lookahead and %d from file\n"
+msgstr ""
+
+#: pg_backup_tar.c:549
+#, c-format
+msgid "could not write to tar member (wrote %d, attempted %d)\n"
+msgstr ""
+
+#: pg_backup_tar.c:637
+#, c-format
+msgid "bad COPY statement - could not find \"copy\" in string \"%s\"\n"
+msgstr ""
+
+#: pg_backup_tar.c:655
+#, c-format
+msgid ""
+"bad COPY statement - could not find \"from stdin\" in string \"%s\" starting "
+"at position %d\n"
+msgstr ""
+
+#: pg_backup_tar.c:857
+msgid "could not write null block at end of tar archive\n"
+msgstr ""
+
+#: pg_backup_tar.c:1052
+#, c-format
+msgid "write error appending to tar archive (wrote %d, attempted %d)\n"
+msgstr ""
+
+#: pg_backup_tar.c:1057
+#, c-format
+msgid "could not close tar member: %s\n"
+msgstr ""
+
+#: pg_backup_tar.c:1060
+#, c-format
+msgid "actual file length (%d) does not match expected (%d)\n"
+msgstr ""
+
+#: pg_backup_tar.c:1067
+msgid "could not output padding at end of tar member\n"
+msgstr ""
+
+#: pg_backup_tar.c:1107 pg_backup_tar.c:1134
+#, c-format
+msgid "could not find header for file %s in tar archive\n"
+msgstr ""
+
+#: pg_backup_tar.c:1122
+#, c-format
+msgid ""
+"dumping data out of order is not supported in this archive format: %s is "
+"required, but comes before %s in the archive file.\n"
+msgstr ""
+
+#: pg_backup_tar.c:1163
+#, c-format
+msgid "mismatch in actual vs. predicted file position (%d vs. %d)\n"
+msgstr ""
+
+#: pg_backup_tar.c:1176
+#, c-format
+msgid "incomplete tar header found (%d bytes)\n"
+msgstr ""
+
+#: pg_backup_tar.c:1209
+#, c-format
+msgid ""
+"corrupt tar header found in %s (expected %d (%o), computed %d (%o)) file "
+"position %ld (%lx)\n"
+msgstr ""
+
+#: pg_backup_tar.c:1286
+msgid "unable to write tar header\n"
+msgstr ""
+
+#: pg_restore.c:349
+#, c-format
+msgid ""
+"%s restores a PostgreSQL database from an archive created by pg_dump.\n"
+"\n"
+"Usage:\n"
+"  %s [options] [file]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#: pg_restore.c:355
+msgid ""
+"  -a, --data-only          restore only the data, no schema\n"
+"  -c, --clean              clean (drop) schema prior to create\n"
+"  -C, --create             output commands to create the database\n"
+"  -d, --dbname=NAME        specify database name\n"
+"  -f, --file=FILENAME      script output file name\n"
+"  -F, --format {c|f}       specify backup file format\n"
+"  -h, --host HOSTNAME      server host name\n"
+"  -i, --index[=NAME]       restore indexes or named index\n"
+"  -l, --list               dump summarized TOC for this file\n"
+"  -L, --use-list=FILENAME  use specified table of contents for ordering\n"
+"                           output from this file\n"
+"  -N, --orig-order         restore in original dump order\n"
+"  -o, --oid-order          restore in oid order\n"
+"  -O, --no-owner           do not reconnect to database to match\n"
+"                           object owner\n"
+"  -p, --port PORT          server port number\n"
+"  -P, --function[=NAME]    restore functions or named function\n"
+"  -r, --rearrange          rearrange output to put indexes etc. at end\n"
+"  -R, --no-reconnect       disallow ALL reconnections to the database\n"
+"  -s, --schema-only        restore only the schema, no data\n"
+"  -S, --superuser=NAME     specify the superuser user name to use for\n"
+"                           disabling triggers\n"
+"  -t, --table[=TABLE]      restore this table only\n"
+"  -T, --trigger[=NAME]     restore triggers or named trigger\n"
+"  -U, --username=NAME      connect as specified database user\n"
+"  -v, --verbose            verbose\n"
+"  -W, --password           force password prompt (should happen "
+"automatically)\n"
+"  -x, --no-acl             skip dumping of ACLs (grant/revoke)\n"
+msgstr ""
+
+#: pg_restore.c:388
+msgid ""
+"  -a                       restore only the data, no schema\n"
+"  -c                       clean (drop) schema prior to create\n"
+"  -C                       output commands to create the database\n"
+"  -d NAME                  specify database name\n"
+"  -f FILENAME              script output file name\n"
+"  -F {c|f}                 specify backup file format\n"
+"  -h HOSTNAME              server host name\n"
+"  -i NAME                  restore indexes or named index\n"
+"  -l                       dump summarized TOC for this file\n"
+"  -L FILENAME              use specified table of contents for ordering\n"
+"                           output from this file\n"
+"  -N                       restore in original dump order\n"
+"  -o                       restore in oid order\n"
+"  -O                       do not output reconnect to database to match\n"
+"                           object owner\n"
+"  -p PORT                  server port number\n"
+"  -P NAME                  restore functions or named function\n"
+"  -r                       rearrange output to put indexes etc at end\n"
+"  -R                       disallow ALL reconnections to the database\n"
+"  -s                       restore only the schema, no data\n"
+"  -S NAME                  specify the superuser user name to use for\n"
+"                           disabling triggers\n"
+"  -t NAME                  restore this table only\n"
+"  -T NAME                  restore triggers or named trigger\n"
+"  -U NAME                  connect as specified database user\n"
+"  -v                       verbose\n"
+"  -W                       force password prompt (should happen "
+"automatically)\n"
+"  -x                       skip dumping of ACLs (grant/revoke)\n"
+msgstr ""
+
+#: pg_restore.c:418
+msgid "If no input file name is supplied, then standard input is used.\n"
+msgstr "Wenn keine Eingabedatei angegeben ist, wird die Standardeingabe verwendet.\n"
+
+#: pg_restore.c:419
+msgid "Report bugs to <pgsql-bugs@postgresql.org>."
+msgstr "Berichten Sie Fehler an <pgsql-bugs@postgresql.org>."
diff --git a/src/bin/pg_dump/nls.mk b/src/bin/pg_dump/nls.mk
new file mode 100644
index 0000000000000000000000000000000000000000..d8155094bb19a93c5e43375eca99e80378dd6360
--- /dev/null
+++ b/src/bin/pg_dump/nls.mk
@@ -0,0 +1,8 @@
+# $Header: /cvsroot/pgsql/src/bin/pg_dump/nls.mk,v 1.1 2001/06/27 21:21:37 petere Exp $
+CATALOG_NAME	:= pg_dump
+AVAIL_LANGUAGES	:= de
+GETTEXT_FILES	:= pg_dump.c common.c pg_backup_archiver.c pg_backup_custom.c \
+                   pg_backup_db.c pg_backup_files.c pg_backup_null.c \
+                   pg_backup_tar.c pg_restore.c
+GETTEXT_TRIGGERS:= write_msg:2 die_horribly:3 exit_horribly:3 simple_prompt \
+                   ExecuteSqlCommand:3
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 1aedab8773dd39211dd8b9282db78f89a0970c5c..7e555957eb082c9e05b2050a68e9222ed80d9657 100644
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup.h,v 1.12 2001/05/17 21:12:48 petere Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup.h,v 1.13 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -129,7 +129,7 @@ typedef struct _restoreOptions
  * Main archiver interface.
  */
 
-extern void exit_horribly(Archive *AH, const char *fmt,...);
+extern void exit_horribly(Archive *AH, const char *modulename, const char *fmt, ...) __attribute__((format(printf,3,4)));
 
 extern char *
 simple_prompt(const char *prompt, int maxlen, bool echo);
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 647005f359cbb036c44ea1a0bd2d06a09d1b2b52..ed7a4841bbf1b34c872bae0a25a533419d473237 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.27 2001/05/17 21:12:48 petere Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.28 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -64,13 +64,9 @@
 #include "pg_backup_archiver.h"
 #include "pg_backup_db.h"
 
-#include <string.h>
+#include <errno.h>
 #include <unistd.h>				/* for dup */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
 #include "pqexpbuffer.h"
 #include "libpq/libpq-fs.h"
 
@@ -94,9 +90,11 @@ static int	_discoverArchiveFormat(ArchiveHandle *AH);
 static void _fixupOidInfo(TocEntry *te);
 static Oid _findMaxOID(const char *((*deps)[]));
 
-static char *progname = "Archiver";
+const char *progname;
+static char *modulename = "archiver";
 
-static void _die_horribly(ArchiveHandle *AH, const char *fmt, va_list ap);
+static void _write_msg(const char *modulename, const char *fmt, va_list ap);
+static void _die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap);
 
 static int	_canRestoreBlobs(ArchiveHandle *AH);
 static int	_restoringToDB(ArchiveHandle *AH);
@@ -148,7 +146,7 @@ CloseArchive(Archive *AHX)
 		res = fclose(AH->OF);
 
 	if (res != 0)
-		die_horribly(AH, "%s: could not close the output file in CloseArchive\n", progname);
+		die_horribly(AH, modulename, "could not close the output file in CloseArchive\n");
 }
 
 /* Public */
@@ -165,7 +163,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 	AH->ropt = ropt;
 
 	if (ropt->create && ropt->noReconnect)
-		die_horribly(AH, "%s: --create and --no-reconnect are incompatible options\n", progname);
+		die_horribly(AH, modulename, "-C and -R are incompatible options\n");
 
 	/*
 	 * If we're using a DB connection, then connect it.
@@ -174,7 +172,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 	{
 		ahlog(AH, 1, "Connecting to database for restore\n");
 		if (AH->version < K_VERS_1_3)
-			die_horribly(AH, "Direct database connections are not supported in pre-1.3 archives");
+			die_horribly(AH, modulename, "direct database connections are not supported in pre-1.3 archives\n");
 
 		/* XXX Should get this from the archive */
 		AHX->minRemoteVersion = 070100;
@@ -226,11 +224,10 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 	}
 
 	if (!ropt->superuser)
-		fprintf(stderr, "\n%s: ******** WARNING ******** \n"
-		 "        Data restoration may fail since any defined triggers\n"
-		"        can not be disabled (no superuser username specified).\n"
-		"        This is only a problem for restoration into a database\n"
-				"        with triggers already defined.\n\n", progname);
+		write_msg(modulename, "WARNING:\n"
+				  "  Data restoration may fail because existing triggers cannot be disabled\n"
+				  "  (no superuser user name specified).  This is only a problem when\n"
+				  "  restoring into a database with already existing triggers.\n");
 
 	/*
 	 * Setup the output file if necessary.
@@ -275,12 +272,9 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 		if (!ropt->suppressDumpWarnings && strcmp(te->desc, "WARNING") == 0)
 		{
 			if (!ropt->dataOnly && te->defn != NULL && strlen(te->defn) != 0) 
-			{
-				fprintf(stderr, "%s: Warning from original dump file:\n%s\n", progname, te->defn);
-			} else if (te->copyStmt != NULL && strlen(te->copyStmt) != 0)
-			{
-				fprintf(stderr, "%s: Warning from original dump file:\n%s\n", progname, te->copyStmt);
-			}
+				write_msg(modulename, "warning from original dump file: %s\n", te->defn);
+			else if (te->copyStmt != NULL && strlen(te->copyStmt) != 0)
+				write_msg(modulename, "warning from original dump file: %s\n", te->copyStmt);
 	 	}
 
 		defnDumped = false;
@@ -320,8 +314,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 				{
 #ifndef HAVE_LIBZ
 					if (AH->compression != 0)
-						die_horribly(AH, "%s: Unable to restore data from a compressed archive\n", 
-										progname);
+						die_horribly(AH, modulename, "unable to restore from compressed archive (not configured for compression support)\n");
 #endif
 
 					_printTocEntry(AH, te, ropt, true);
@@ -339,7 +332,7 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 						 * warnings.
 						 */
 						if (!AH->CustomOutPtr)
-							fprintf(stderr, "%s: WARNING - skipping BLOB restoration\n", progname);
+							write_msg(modulename, "WARNING: skipping BLOB restoration\n");
 
 					}
 					else
@@ -599,8 +592,7 @@ WriteData(Archive *AHX, const void *data, int dLen)
 	ArchiveHandle *AH = (ArchiveHandle *) AHX;
 
 	if (!AH->currToc)
-		die_horribly(AH, "%s: WriteData can not be called outside the context of "
-					 "a DataDumper routine\n", progname);
+		die_horribly(AH, modulename, "WriteData cannot be called outside the context of a DataDumper routine\n");
 
 	return (*AH->WriteDataPtr) (AH, data, dLen);
 }
@@ -625,7 +617,7 @@ ArchiveEntry(Archive *AHX, const char *oid, const char *name,
 
 	newToc = (TocEntry *) calloc(1, sizeof(TocEntry));
 	if (!newToc)
-		die_horribly(AH, "Archiver: unable to allocate memory for TOC entry\n");
+		die_horribly(AH, modulename, "out of memory\n");
 
 	newToc->prev = AH->toc->prev;
 	newToc->next = AH->toc;
@@ -720,7 +712,7 @@ StartBlob(Archive *AHX, Oid oid)
 	ArchiveHandle *AH = (ArchiveHandle *) AHX;
 
 	if (!AH->StartBlobPtr)
-		die_horribly(AH, "%s: BLOB output not supported in chosen format\n", progname);
+		die_horribly(AH, modulename, "BLOB output not supported in chosen format\n");
 
 	(*AH->StartBlobPtr) (AH, AH->currToc, oid);
 
@@ -784,7 +776,7 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
 	if (!AH->createdBlobXref)
 	{
 		if (!AH->connection)
-			die_horribly(AH, "%s: can not restore BLOBs without a database connection", progname);
+			die_horribly(AH, modulename, "cannot restore BLOBs without a database connection");
 
 		CreateBlobXrefTable(AH);
 		AH->createdBlobXref = 1;
@@ -803,7 +795,7 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
 
 	loOid = lo_creat(AH->connection, INV_READ | INV_WRITE);
 	if (loOid == 0)
-		die_horribly(AH, "%s: unable to create BLOB\n", progname);
+		die_horribly(AH, modulename, "could not create BLOB\n");
 
 	ahlog(AH, 2, "Restoring BLOB oid %d as %d\n", oid, loOid);
 
@@ -811,7 +803,7 @@ StartRestoreBlob(ArchiveHandle *AH, Oid oid)
 
 	AH->loFd = lo_open(AH->connection, loOid, INV_WRITE);
 	if (AH->loFd == -1)
-		die_horribly(AH, "%s: unable to open BLOB\n", progname);
+		die_horribly(AH, modulename, "could not open BLOB\n");
 
 	AH->writingBlob = 1;
 }
@@ -951,7 +943,7 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 	/* Setup the file */
 	fh = fopen(ropt->tocFile, PG_BINARY_R);
 	if (!fh)
-		die_horribly(AH, "%s: could not open TOC file\n", progname);
+		die_horribly(AH, modulename, "could not open TOC file\n");
 
 	while (fgets(buf, 1024, fh) != NULL)
 	{
@@ -972,14 +964,14 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 		id = strtol(buf, &endptr, 10);
 		if (endptr == buf)
 		{
-			fprintf(stderr, "%s: WARNING - line ignored: %s\n", progname, buf);
+			write_msg(modulename, "WARNING: line ignored: %s\n", buf);
 			continue;
 		}
 
 		/* Find TOC entry */
 		te = _getTocEntry(AH, id);
 		if (!te)
-			die_horribly(AH, "%s: could not find entry for id %d\n", progname, id);
+			die_horribly(AH, modulename, "could not find entry for id %d\n", id);
 
 		ropt->idWanted[id - 1] = 1;
 
@@ -988,7 +980,7 @@ SortTocFromFile(Archive *AHX, RestoreOptions *ropt)
 	}
 
 	if (fclose(fh) != 0)
-		die_horribly(AH, "%s: could not close TOC file\n", progname);
+		die_horribly(AH, modulename, "could not close TOC file: %s\n", strerror(errno));
 }
 
 /**********************
@@ -1035,7 +1027,7 @@ archprintf(Archive *AH, const char *fmt,...)
 		bSize *= 2;
 		p = (char *) malloc(bSize);
 		if (p == NULL)
-			exit_horribly(AH, "%s: could not allocate buffer for archprintf\n", progname);
+			exit_horribly(AH, modulename, "out of memory\n");
 		va_start(ap, fmt);
 		cnt = vsnprintf(p, bSize, fmt, ap);
 		va_end(ap);
@@ -1104,7 +1096,7 @@ SetOutput(ArchiveHandle *AH, char *filename, int compression)
 #endif
 
 	if (!AH->OF)
-		die_horribly(AH, "%s: could not set output\n", progname);
+		die_horribly(AH, modulename, "could not open output file: %s\n", strerror(errno));
 
 	return sav;
 }
@@ -1120,7 +1112,7 @@ ResetOutput(ArchiveHandle *AH, OutputContext sav)
 		res = fclose(AH->OF);
 
 	if (res != 0)
-		die_horribly(AH, "%s: could not reset the output file\n", progname);
+		die_horribly(AH, modulename, "could not close output file: %s\n", strerror(errno));
 
 	AH->gzOut = sav.gzOut;
 	AH->OF = sav.OF;
@@ -1155,7 +1147,7 @@ ahprintf(ArchiveHandle *AH, const char *fmt,...)
 		bSize *= 2;
 		p = (char *) malloc(bSize);
 		if (p == NULL)
-			die_horribly(AH, "%s: could not allocate buffer for ahprintf\n", progname);
+			die_horribly(AH, modulename, "out of memory\n");
 		va_start(ap, fmt);
 		cnt = vsnprintf(p, bSize, fmt, ap);
 		va_end(ap);
@@ -1203,8 +1195,8 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
 		res = lo_write(AH->connection, AH->loFd, (void *) ptr, size * nmemb);
 		ahlog(AH, 5, "Wrote %d bytes of BLOB data (result = %d)\n", size * nmemb, res);
 		if (res < size * nmemb)
-			die_horribly(AH, "%s: could not write to large object (result = %d, expected %d)\n",
-						 progname, res, size * nmemb);
+			die_horribly(AH, modulename, "could not write to large object (result: %d, expected: %d)\n",
+						 res, size * nmemb);
 
 		return res;
 	}
@@ -1212,7 +1204,7 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
 	{
 		res = GZWRITE((void *) ptr, size, nmemb, AH->OF);
 		if (res != (nmemb * size))
-			die_horribly(AH, "%s: could not write to archive\n", progname);
+			die_horribly(AH, modulename, "could not write to compressed archive\n");
 		return res;
 	}
 	else if (AH->CustomOutPtr)
@@ -1220,7 +1212,7 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
 		res = AH->CustomOutPtr (AH, ptr, size * nmemb);
 
 		if (res != (nmemb * size))
-			die_horribly(AH, "%s: could not write to custom output routine\n", progname);
+			die_horribly(AH, modulename, "could not write to custom output routine\n");
 		return res;
 	}
 	else
@@ -1236,7 +1228,7 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
 		{
 			res = fwrite((void *) ptr, size, nmemb, AH->OF);
 			if (res != nmemb)
-				die_horribly(AH, "%s: could not write to output file (%d != %d)\n", progname, res, nmemb);
+				die_horribly(AH, modulename, "could not write to output file (%d != %d)\n", res, nmemb);
 			return res;
 		}
 	}
@@ -1244,9 +1236,30 @@ ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
 
 /* Common exit code */
 static void
-_die_horribly(ArchiveHandle *AH, const char *fmt, va_list ap)
+_write_msg(const char *modulename, const char *fmt, va_list ap)
 {
-	vfprintf(stderr, fmt, ap);
+	if (modulename)
+		fprintf(stderr, "%s[%s]: ", progname, gettext(modulename));
+	else
+		fprintf(stderr, "%s: ", progname);
+	vfprintf(stderr, gettext(fmt), ap);
+}
+
+void
+write_msg(const char *modulename, const char *fmt, ...)
+{
+	va_list		ap;
+
+	va_start(ap, fmt);
+	_write_msg(modulename, fmt, ap);
+	va_end(ap);
+}
+
+
+static void
+_die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, va_list ap)
+{
+	_write_msg(modulename, fmt, ap);
 
 	if (AH)
 		if (AH->connection)
@@ -1259,22 +1272,22 @@ _die_horribly(ArchiveHandle *AH, const char *fmt, va_list ap)
 
 /* External use */
 void
-exit_horribly(Archive *AH, const char *fmt,...)
+exit_horribly(Archive *AH, const char *modulename, const char *fmt,...)
 {
 	va_list		ap;
 
 	va_start(ap, fmt);
-	_die_horribly((ArchiveHandle *) AH, fmt, ap);
+	_die_horribly((ArchiveHandle *) AH, modulename, fmt, ap);
 }
 
 /* Archiver use (just different arg declaration) */
 void
-die_horribly(ArchiveHandle *AH, const char *fmt,...)
+die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt,...)
 {
 	va_list		ap;
 
 	va_start(ap, fmt);
-	_die_horribly(AH, fmt, ap);
+	_die_horribly(AH, modulename, fmt, ap);
 }
 
 
@@ -1420,7 +1433,7 @@ ReadStr(ArchiveHandle *AH)
 	{
 		buf = (char *) malloc(l + 1);
 		if (!buf)
-			die_horribly(AH, "%s: Unable to allocate sufficient memory in ReadStr - " "requested %d (0x%x) bytes\n", progname, l, l);
+			die_horribly(AH, modulename, "out of memory\n");
 
 		(*AH->ReadBufPtr) (AH, (void *) buf, l);
 		buf[l] = '\0';
@@ -1437,10 +1450,9 @@ _discoverArchiveFormat(ArchiveHandle *AH)
 	int			cnt;
 	int			wantClose = 0;
 
-	/*
-	 * fprintf(stderr, "%s: Attempting to ascertain archive format\n",
-	 * progname);
-	 */
+#if 0
+	 write_msg(modulename, "attempting to ascertain archive format\n");
+#endif
 
 	if (AH->lookahead)
 		free(AH->lookahead);
@@ -1459,13 +1471,17 @@ _discoverArchiveFormat(ArchiveHandle *AH)
 		fh = stdin;
 
 	if (!fh)
-		die_horribly(AH, "Archiver: could not open input file\n");
+		die_horribly(AH, modulename, "could not open input file: %s\n", strerror(errno));
 
 	cnt = fread(sig, 1, 5, fh);
 
 	if (cnt != 5)
-		die_horribly(AH, "%s: input file is too short, or is unreadable (read %d, expected 5)\n", 
-							progname, cnt);
+	{
+		if (ferror(fh))
+			die_horribly(AH, modulename, "could not read input file: %s\n", strerror(errno));
+		else
+			die_horribly(AH, modulename, "input file is too short (read %d, expected 5)\n", cnt);
+	}
 
 	/* Save it, just in case we need it later */
 	strncpy(&AH->lookahead[0], sig, 5);
@@ -1509,11 +1525,10 @@ _discoverArchiveFormat(ArchiveHandle *AH)
 		AH->lookaheadLen += cnt;
 
 		if (AH->lookaheadLen != 512)
-			die_horribly(AH, "%s: input file does not appear to be a valid archive (too short?)\n",
-						 progname);
+			die_horribly(AH, modulename, "input file does not appear to be a valid archive (too short?)\n");
 
 		if (!isValidTarHeader(AH->lookahead))
-			die_horribly(AH, "%s: input file does not appear to be a valid archive\n", progname);
+			die_horribly(AH, modulename, "input file does not appear to be a valid archive\n");
 
 		AH->format = archTar;
 	}
@@ -1531,15 +1546,15 @@ _discoverArchiveFormat(ArchiveHandle *AH)
 	else
 		AH->lookaheadLen = 0;	/* Don't bother since we've reset the file */
 
-	/*
-	 * fprintf(stderr, "%s: read %d bytes into lookahead buffer\n",
-	 * progname, AH->lookaheadLen);
-	 */
+#if 0
+	write_msg(modulename, "read %d bytes into lookahead buffer\n", AH->lookaheadLen);
+#endif
 
 	/* Close the file */
 	if (wantClose)
 		if (fclose(fh) != 0)
-			die_horribly(AH, "%s: could not close the input file after reading header\n", progname);
+			die_horribly(AH, modulename, "could not close the input file after reading header: %s\n",
+						 strerror(errno));
 
 	return AH->format;
 }
@@ -1554,14 +1569,13 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
 {
 	ArchiveHandle *AH;
 
-	/*
-	 * fprintf(stderr, "%s: allocating AH for %s, format %d\n", progname,
-	 * FileSpec, fmt);
-	 */
+#if 0
+	 write_msg(modulename, "allocating AH for %s, format %d\n", FileSpec, fmt);
+#endif
 
 	AH = (ArchiveHandle *) calloc(1, sizeof(ArchiveHandle));
 	if (!AH)
-		die_horribly(AH, "Archiver: Could not allocate archive handle\n");
+		die_horribly(AH, modulename, "out of memory\n");
 
 	AH->vmaj = K_VERS_MAJOR;
 	AH->vmin = K_VERS_MINOR;
@@ -1590,7 +1604,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
 
 	AH->toc = (TocEntry *) calloc(1, sizeof(TocEntry));
 	if (!AH->toc)
-		die_horribly(AH, "Archiver: Could not allocate TOC header\n");
+		die_horribly(AH, modulename, "out of memory\n");
 
 	AH->toc->next = AH->toc;
 	AH->toc->prev = AH->toc;
@@ -1605,9 +1619,9 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
 	AH->gzOut = 0;
 	AH->OF = stdout;
 
-	/*
-	 * fprintf(stderr, "%s: archive format is %d\n", progname, fmt);
-	 */
+#if 0
+	 write_msg(modulename, "archive format is %d\n", fmt);
+#endif
 
 	if (fmt == archUnknown)
 		AH->format = _discoverArchiveFormat(AH);
@@ -1634,7 +1648,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
 			break;
 
 		default:
-			die_horribly(AH, "Archiver: Unrecognized file format '%d'\n", fmt);
+			die_horribly(AH, modulename, "unrecognized file format '%d'\n", fmt);
 	}
 
 	return AH;
@@ -1748,7 +1762,7 @@ ReadToc(ArchiveHandle *AH)
 
 		/* Sanity check */
 		if (te->id <= 0 || te->id > AH->tocCount)
-			die_horribly(AH, "Archiver: failed sanity check (bad entry id) - perhaps a corrupt TOC\n");
+			die_horribly(AH, modulename, "failed sanity check (bad entry id) - perhaps a corrupt TOC\n");
 
 		te->hadDumper = ReadInt(AH);
 		te->oid = ReadStr(AH);
@@ -1778,22 +1792,20 @@ ReadToc(ArchiveHandle *AH)
 					deps = realloc(deps, sizeof(char*) * depSize);
 				}
 				(*deps)[depIdx] = ReadStr(AH);
-				/* 
-				 * if ((*deps)[depIdx])
-				 *  fprintf(stderr, "Read Dependency for %s -> %s\n", te->name, (*deps)[depIdx]);
-				 */
+#if 0
+				if ((*deps)[depIdx])
+					write_msg(modulename, "read dependency for %s -> %s\n",
+							  te->name, (*deps)[depIdx]);
+#endif
 			} while ( (*deps)[depIdx++] != NULL);
 
 			if (depIdx > 1) /* We have a non-null entry */
-			{
-				/* Trim it */
-				te->depOid = realloc(deps, sizeof(char*) * depIdx);
-			} else { /* No deps */
-				te->depOid = NULL;
-			}
-		} else {
-			te->depOid = NULL;
+				te->depOid = realloc(deps, sizeof(char*) * depIdx);	/* trim it */
+			else
+				te->depOid = NULL; /* no deps */
 		}
+		else
+			te->depOid = NULL;
 
 		/* Set maxOidVal etc for use in sorting */
 		_fixupOidInfo(te);
@@ -1946,11 +1958,10 @@ WriteHead(ArchiveHandle *AH)
 
 #ifndef HAVE_LIBZ
 	if (AH->compression != 0)
-		fprintf(stderr, "%s: WARNING - requested compression not available in this installation - "
-				"archive will be uncompressed \n", progname);
+		write_msg(modulename, "WARNING: requested compression not available in this "
+				  "installation - archive will be uncompressed\n");
 
 	AH->compression = 0;
-
 #endif
 
 	WriteInt(AH, AH->compression);
@@ -1980,7 +1991,7 @@ ReadHead(ArchiveHandle *AH)
 		(*AH->ReadBufPtr) (AH, tmpMag, 5);
 
 		if (strncmp(tmpMag, "PGDMP", 5) != 0)
-			die_horribly(AH, "Archiver: Did not fing magic PGDMP in file header\n");
+			die_horribly(AH, modulename, "did not find magic string in file header\n");
 
 		AH->vmaj = (*AH->ReadBytePtr) (AH);
 		AH->vmin = (*AH->ReadBytePtr) (AH);
@@ -1994,22 +2005,21 @@ ReadHead(ArchiveHandle *AH)
 
 
 		if (AH->version < K_VERS_1_0 || AH->version > K_VERS_MAX)
-			die_horribly(AH, "%s: unsupported version (%d.%d) in file header\n",
-						 progname, AH->vmaj, AH->vmin);
+			die_horribly(AH, modulename, "unsupported version (%d.%d) in file header\n",
+						 AH->vmaj, AH->vmin);
 
 		AH->intSize = (*AH->ReadBytePtr) (AH);
 		if (AH->intSize > 32)
-			die_horribly(AH, "Archiver: sanity check on integer size (%d) failes\n", AH->intSize);
+			die_horribly(AH, modulename, "sanity check on integer size (%d) failed\n", AH->intSize);
 
 		if (AH->intSize > sizeof(int))
-			fprintf(stderr, "\n%s: WARNING - archive was made on a machine with larger integers, "
-					"some operations may fail\n", progname);
+			write_msg(modulename, "WARNING: archive was made on a machine with larger integers, some operations may fail\n");
 
 		fmt = (*AH->ReadBytePtr) (AH);
 
 		if (AH->format != fmt)
-			die_horribly(AH, "%s: expected format (%d) differs from format found in file (%d)\n",
-						 progname, AH->format, fmt);
+			die_horribly(AH, modulename, "expected format (%d) differs from format found in file (%d)\n",
+						 AH->format, fmt);
 	}
 
 	if (AH->version >= K_VERS_1_2)
@@ -2024,8 +2034,7 @@ ReadHead(ArchiveHandle *AH)
 
 #ifndef HAVE_LIBZ
 	if (AH->compression != 0)
-		fprintf(stderr, "%s: WARNING - archive is compressed - any data will not be available\n",
-				progname);
+		write_msg(modulename, "WARNING: archive is compressed, but this installation does not support compression - no data will be available\n");
 #endif
 
 	if (AH->version >= K_VERS_1_4)
@@ -2043,7 +2052,7 @@ ReadHead(ArchiveHandle *AH)
 		AH->createDate = mktime(&crtm);
 
 		if (AH->createDate == (time_t) -1)
-			fprintf(stderr, "%s: WARNING - bad creation date in header\n", progname);
+			write_msg(modulename, "WARNING: bad creation date in header\n");
 	}
 
 }
diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index a5357dacd858e90eb70aca812d5942bb5d38a937..0d5dcda4dec9de2d72f54790e942dab4ebb60ce8 100644
--- a/src/bin/pg_dump/pg_backup_archiver.h
+++ b/src/bin/pg_dump/pg_backup_archiver.h
@@ -17,7 +17,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.34 2001/05/17 21:12:48 petere Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.35 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *	-	Initial version.
@@ -38,6 +38,7 @@
 #include "postgres_fe.h"
 
 #include <time.h>
+#include <errno.h>
 
 #include "pqexpbuffer.h"
 
@@ -271,7 +272,9 @@ typedef struct _tocEntry
 } TocEntry;
 
 /* Used everywhere */
-extern void die_horribly(ArchiveHandle *AH, const char *fmt,...);
+extern const char *progname;
+extern void die_horribly(ArchiveHandle *AH, const char *modulename, const char *fmt, ...) __attribute__((format(printf,3,4)));
+extern void write_msg(const char *modulename, const char *fmt, ...) __attribute__((format(printf,2,3)));
 
 extern void WriteTOC(ArchiveHandle *AH);
 extern void ReadTOC(ArchiveHandle *AH);
diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c
index 3e839ca38bf4073d16493540b6b2655b5ca6ba2f..00120d3039f7ec9aa67ed33415c0d0c8b551eecb 100644
--- a/src/bin/pg_dump/pg_backup_custom.c
+++ b/src/bin/pg_dump/pg_backup_custom.c
@@ -19,7 +19,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.11 2001/04/25 07:03:19 pjw Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_custom.c,v 1.12 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -35,7 +35,6 @@
 #include "pg_backup.h"
 #include "pg_backup_archiver.h"
 
-#include <stdlib.h>
 #include <errno.h>
 
 /*--------
@@ -103,7 +102,7 @@ static void _EndDataCompressor(ArchiveHandle *AH, TocEntry *te);
 static int	_getFilePos(ArchiveHandle *AH, lclContext *ctx);
 static int	_DoDeflate(ArchiveHandle *AH, lclContext *ctx, int flush);
 
-static char *progname = "Archiver(custom)";
+static char *modulename = "custom archiver";
 
 
 
@@ -147,12 +146,12 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
 	 */
 	ctx = (lclContext *) malloc(sizeof(lclContext));
 	if (ctx == NULL)
-		die_horribly(AH, "%s: Unable to allocate archive context", progname);
+		die_horribly(AH, modulename, "out of memory\n");
 	AH->formatData = (void *) ctx;
 
 	ctx->zp = (z_streamp) malloc(sizeof(z_stream));
 	if (ctx->zp == NULL)
-		die_horribly(AH, "%s: unable to allocate zlib stream archive context", progname);
+		die_horribly(AH, modulename, "out of memory\n");
 
 	/*
 	 * zlibOutSize is the buffer size we tell zlib it can output to.  We
@@ -167,7 +166,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
 	ctx->filePos = 0;
 
 	if (ctx->zlibOut == NULL || ctx->zlibIn == NULL)
-		die_horribly(AH, "%s: unable to allocate buffers in archive context", progname);
+		die_horribly(AH, modulename, "out of memory\n");
 
 	/*
 	 * Now open the file
@@ -181,7 +180,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
 			AH->FH = stdout;
 
 		if (!AH->FH)
-			die_horribly(AH, "%s: unable to open archive file %s", progname, AH->fSpec);
+			die_horribly(AH, modulename, "could not open archive file %s: %s\n", AH->fSpec, strerror(errno));
 
 		ctx->hasSeek = (fseek(AH->FH, 0, SEEK_CUR) == 0);
 
@@ -194,7 +193,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
 		else
 			AH->FH = stdin;
 		if (!AH->FH)
-			die_horribly(AH, "%s: unable to open archive file %s", progname, AH->fSpec);
+			die_horribly(AH, modulename, "could not open archive file %s: %s", AH->fSpec, strerror(errno));
 
 		ctx->hasSeek = (fseek(AH->FH, 0, SEEK_CUR) == 0);
 
@@ -387,7 +386,7 @@ static void
 _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
 {
 	if (oid == 0)
-		die_horribly(AH, "%s: illegal OID for BLOB (%d)\n", progname, oid);
+		die_horribly(AH, modulename, "invalid OID for BLOB\n");
 
 	WriteInt(AH, oid);
 	_StartDataCompressor(AH, te);
@@ -446,8 +445,9 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 		{
 
 			if ((TocIDRequired(AH, id, ropt) & 2) != 0)
-				die_horribly(AH, "%s: Dumping a specific TOC data block out of order is not supported"
-							 " without on this input stream (fseek required)\n", progname);
+				die_horribly(AH, modulename,
+							 "Dumping a specific TOC data block out of order is not supported"
+							 " without id on this input stream (fseek required)\n");
 
 			switch (blkType)
 			{
@@ -464,8 +464,9 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 
 				default:		/* Always have a default */
 
-					die_horribly(AH, "%s: unrecognized data block type while searching archive %d\n",
-								 progname, blkType);
+					die_horribly(AH, modulename,
+								 "unrecognized data block type (%d) while searching archive\n",
+								 blkType);
 					break;
 			}
 
@@ -480,7 +481,7 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 		/* Grab it */
 
 		if (fseek(AH->FH, tctx->dataPos, SEEK_SET) != 0)
-			die_horribly(AH, "%s: error %d in file seek\n", progname, errno);
+			die_horribly(AH, modulename, "error during file seek: %s\n", strerror(errno));
 
 		_readBlockHeader(AH, &blkType, &id);
 
@@ -488,8 +489,8 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 
 	/* Are we sane? */
 	if (id != te->id)
-		die_horribly(AH, "%s: Found unexpected block ID (%d) when reading data - expected %d\n",
-					 progname, id, te->id);
+		die_horribly(AH, modulename, "found unexpected block ID (%d) when reading data - expected %d\n",
+					 id, te->id);
 
 	switch (blkType)
 	{
@@ -502,15 +503,15 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 		case BLK_BLOBS:
 
 			if (!AH->connection)
-				die_horribly(AH, "%s: BLOBs can not be loaded without a database connection\n", progname);
+				die_horribly(AH, modulename, "BLOBs cannot be loaded without a database connection\n");
 
 			_LoadBlobs(AH);
 			break;
 
 		default:				/* Always have a default */
 
-			die_horribly(AH, "%s: unrecognized data block type %d while restoring archive\n",
-						 progname, blkType);
+			die_horribly(AH, modulename, "unrecognized data block type %d while restoring archive\n",
+						 blkType);
 			break;
 	}
 
@@ -546,7 +547,7 @@ _PrintData(ArchiveHandle *AH)
 		zp->opaque = Z_NULL;
 
 		if (inflateInit(zp) != Z_OK)
-			die_horribly(AH, "%s: could not initialize compression library - %s\n", progname, zp->msg);
+			die_horribly(AH, modulename, "could not initialize compression library: %s\n", zp->msg);
 	}
 
 #endif
@@ -560,7 +561,7 @@ _PrintData(ArchiveHandle *AH)
 			ctx->zlibIn = NULL;
 			ctx->zlibIn = (char *) malloc(blkLen + 1);
 			if (!ctx->zlibIn)
-				die_horribly(AH, "%s: failed to allocate decompression buffer\n", progname);
+				die_horribly(AH, modulename, "out of memory\n");
 
 			ctx->inSize = blkLen + 1;
 			in = ctx->zlibIn;
@@ -568,7 +569,7 @@ _PrintData(ArchiveHandle *AH)
 
 		cnt = fread(in, 1, blkLen, AH->FH);
 		if (cnt != blkLen)
-			die_horribly(AH, "%s: could not read data block - expected %d, got %d\n", progname, blkLen, cnt);
+			die_horribly(AH, modulename, "could not read data block - expected %d, got %d\n", blkLen, cnt);
 
 		ctx->filePos += blkLen;
 
@@ -586,7 +587,7 @@ _PrintData(ArchiveHandle *AH)
 				zp->avail_out = zlibOutSize;
 				res = inflate(zp, 0);
 				if (res != Z_OK && res != Z_STREAM_END)
-					die_horribly(AH, "%s: unable to uncompress data - %s\n", progname, zp->msg);
+					die_horribly(AH, modulename, "unable to uncompress data: %s\n", zp->msg);
 
 				out[zlibOutSize - zp->avail_out] = '\0';
 				ahwrite(out, 1, zlibOutSize - zp->avail_out, AH);
@@ -618,7 +619,7 @@ _PrintData(ArchiveHandle *AH)
 			zp->avail_out = zlibOutSize;
 			res = inflate(zp, 0);
 			if (res != Z_OK && res != Z_STREAM_END)
-				die_horribly(AH, "%s: unable to uncompress data - %s\n", progname, zp->msg);
+				die_horribly(AH, modulename, "unable to uncompress data: %s\n", zp->msg);
 
 			out[zlibOutSize - zp->avail_out] = '\0';
 			ahwrite(out, 1, zlibOutSize - zp->avail_out, AH);
@@ -692,7 +693,7 @@ _skipData(ArchiveHandle *AH)
 		}
 		cnt = fread(in, 1, blkLen, AH->FH);
 		if (cnt != blkLen)
-			die_horribly(AH, "%s: could not read data block - expected %d, got %d\n", progname, blkLen, cnt);
+			die_horribly(AH, modulename, "could not read data block - expected %d, got %d\n", blkLen, cnt);
 
 		ctx->filePos += blkLen;
 
@@ -720,7 +721,7 @@ _WriteByte(ArchiveHandle *AH, const int i)
 	if (res != EOF)
 		ctx->filePos += 1;
 	else
-		die_horribly(AH, "%s: could not write byte./n", progname);
+		die_horribly(AH, modulename, "could not write byte: %s\n", strerror(errno));
 	return res;
 }
 
@@ -763,7 +764,7 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, int len)
 	res = fwrite(buf, 1, len, AH->FH);
 
 	if (res != len)
-		die_horribly(AH, "%s: write error in _WriteBuf (%d != %d)\n", progname, res, len);
+		die_horribly(AH, modulename, "write error in _WriteBuf (%d != %d)\n", res, len);
 
 	ctx->filePos += res;
 	return res;
@@ -833,7 +834,7 @@ _CloseArchive(ArchiveHandle *AH)
 	}
 
 	if (fclose(AH->FH) != 0)
-		die_horribly(AH, "%s: could not close archive file\n", progname);
+		die_horribly(AH, modulename, "could not close archive file: %s\n", strerror(errno));
 
 	AH->FH = NULL;
 }
@@ -856,7 +857,7 @@ _getFilePos(ArchiveHandle *AH, lclContext *ctx)
 		pos = ftell(AH->FH);
 		if (pos != ctx->filePos)
 		{
-			fprintf(stderr, "Warning: ftell mismatch with filePos - filePos used\n");
+			write_msg(modulename, "WARNING: ftell mismatch with filePos - filePos used\n");
 			pos = ctx->filePos;
 		}
 	}
@@ -903,7 +904,7 @@ _StartDataCompressor(ArchiveHandle *AH, TocEntry *te)
 		zp->opaque = Z_NULL;
 
 		if (deflateInit(zp, AH->compression) != Z_OK)
-			die_horribly(AH, "%s: could not initialize compression library - %s\n", progname, zp->msg);
+			die_horribly(AH, modulename, "could not initialize compression library: %s\n", zp->msg);
 	}
 
 #else
@@ -936,7 +937,7 @@ _DoDeflate(ArchiveHandle *AH, lclContext *ctx, int flush)
 	{
 		res = deflate(zp, flush);
 		if (res == Z_STREAM_ERROR)
-			die_horribly(AH, "%s: could not compress data - %s\n", progname, zp->msg);
+			die_horribly(AH, modulename, "could not compress data: %s\n", zp->msg);
 
 		if (((flush == Z_FINISH) && (zp->avail_out < zlibOutSize))
 			|| (zp->avail_out == 0)
@@ -958,7 +959,7 @@ _DoDeflate(ArchiveHandle *AH, lclContext *ctx, int flush)
 				 */
 				WriteInt(AH, zlibOutSize - zp->avail_out);
 				if (fwrite(out, 1, zlibOutSize - zp->avail_out, AH->FH) != (zlibOutSize - zp->avail_out))
-					die_horribly(AH, "%s: could not write compressed chunk\n", progname);
+					die_horribly(AH, modulename, "could not write compressed chunk\n");
 				ctx->filePos += zlibOutSize - zp->avail_out;
 			}
 			zp->next_out = out;
@@ -972,7 +973,7 @@ _DoDeflate(ArchiveHandle *AH, lclContext *ctx, int flush)
 		{
 			WriteInt(AH, zp->avail_in);
 			if (fwrite(zp->next_in, 1, zp->avail_in, AH->FH) != zp->avail_in)
-				die_horribly(AH, "%s: could not write uncompressed chunk\n", progname);
+				die_horribly(AH, modulename, "could not write uncompressed chunk\n");
 			ctx->filePos += zp->avail_in;
 			zp->avail_in = 0;
 		}
@@ -1021,7 +1022,7 @@ _EndDataCompressor(ArchiveHandle *AH, TocEntry *te)
 		} while (res != Z_STREAM_END);
 
 		if (deflateEnd(zp) != Z_OK)
-			die_horribly(AH, "%s: error closing compression stream - %s\n", progname, zp->msg);
+			die_horribly(AH, modulename, "could not close compression stream: %s\n", zp->msg);
 	}
 #endif
 
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c
index bc9cf723b9148f43ab5fa728714f4856037ca517..d3962b6db2193396b840168ceef40e87cee1c1d7 100644
--- a/src/bin/pg_dump/pg_backup_db.c
+++ b/src/bin/pg_dump/pg_backup_db.c
@@ -5,7 +5,7 @@
  *	Implements the basic DB functions used by the archiver.
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.19 2001/05/17 21:12:48 petere Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.20 2001/06/27 21:21:37 petere Exp $
  *
  * NOTES
  *
@@ -38,7 +38,7 @@
 #include "strdup.h"
 #endif
 
-static const char *progname = "Archiver(db)";
+static const char *modulename = "archiver (db)";
 
 static void _check_database_version(ArchiveHandle *AH, bool ignoreVersion);
 static PGconn *_connectDB(ArchiveHandle *AH, const char *newdbname, char *newUser);
@@ -73,7 +73,7 @@ simple_prompt(const char *prompt, int maxlen, bool echo)
 	if (!destination)
 		return NULL;
 	if (prompt)
-		fputs(prompt, stderr);
+		fputs(gettext(prompt), stderr);
 
 #ifdef HAVE_TERMIOS_H
 	if (!echo)
@@ -128,7 +128,7 @@ _parse_version(ArchiveHandle *AH, const char* versionString)
 
 	if (cnt < 2)
 	{
-		die_horribly(AH, "Unable to parse version string: %s\n", versionString);
+		die_horribly(AH, modulename, "unable to parse version string \"%s\"\n", versionString);
 	}
 
 	if (cnt == 2)
@@ -148,13 +148,12 @@ _check_database_version(ArchiveHandle *AH, bool ignoreVersion)
 
 	myversion = _parse_version(AH, PG_VERSION);
 
-	res = PQexec(conn, "SELECT version()");
+	res = PQexec(conn, "SELECT version();");
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK ||
 		PQntuples(res) != 1)
 
-		die_horribly(AH, "check_database_version(): command failed.  "
-			  "Explanation from backend: '%s'.\n", PQerrorMessage(conn));
+		die_horribly(AH, modulename, "could not get version from server: %s", PQerrorMessage(conn));
 
 	remoteversion_str = PQgetvalue(res, 0, 0);
 	remoteversion = _parse_version(AH, remoteversion_str + 11);
@@ -166,13 +165,12 @@ _check_database_version(ArchiveHandle *AH, bool ignoreVersion)
 	if (myversion != remoteversion 
 		&& (remoteversion < AH->public.minRemoteVersion || remoteversion > AH->public.maxRemoteVersion) )
 	{
-		fprintf(stderr, "Database version: %s\n%s version: %s\n",
-				remoteversion_str, progname, PG_VERSION);
+		write_msg(NULL, "server version: %s, %s version: %s\n",
+				  remoteversion_str, progname, PG_VERSION);
 		if (ignoreVersion)
-			fprintf(stderr, "Proceeding despite version mismatch.\n");
+			write_msg(NULL, "proceeding despite version mismatch\n");
 		else
-			die_horribly(AH, "Aborting because of version mismatch.\n"
-						 "Use --ignore-version if you think it's safe to proceed anyway.\n");
+			die_horribly(AH, NULL, "aborting because of version mismatch  (Use the -i option to proceed anyway.)\n");
 	}
 }
 
@@ -193,12 +191,11 @@ UserIsSuperuser(ArchiveHandle *AH, char *user)
 	res = PQexec(AH->connection, qry->data);
 
 	if (!res)
-		die_horribly(AH, "%s: null result checking superuser status of %s.\n",
-					 progname, user);
+		die_horribly(AH, modulename, "null result checking superuser status of %s\n", user);
 
 	if (PQresultStatus(res) != PGRES_TUPLES_OK)
-		die_horribly(AH, "%s: Could not check superuser status of %s. Explanation from backend: %s\n",
-					 progname, user, PQerrorMessage(AH->connection));
+		die_horribly(AH, modulename, "could not check superuser status of %s: %s",
+					 user, PQerrorMessage(AH->connection));
 
 	ntups = PQntuples(res);
 
@@ -284,7 +281,7 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, char *requser)
 	{
 		password = simple_prompt("Password: ", 100, false);
 		if (password == NULL)
-			die_horribly(AH, "out of memory");
+			die_horribly(AH, modulename, "out of memory\n");
 	}
 
 	do
@@ -294,7 +291,7 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, char *requser)
 							   NULL, NULL, newdb,
 							   newuser, password);
 		if (!newConn)
-			die_horribly(AH, "%s: Failed to reconnect (PQsetdbLogin failed).\n", progname);
+			die_horribly(AH, modulename, "failed to reconnect to database\n");
 
 		if (PQstatus(newConn) == CONNECTION_BAD)
 		{
@@ -318,8 +315,8 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, char *requser)
 				password = simple_prompt("Password: ", 100, false);
 			}
 			else
-				die_horribly(AH, "%s: Could not reconnect. %s\n",
-							 progname, PQerrorMessage(newConn));
+				die_horribly(AH, modulename, "could not reconnect to database: %s",
+							 PQerrorMessage(newConn));
 		}
 
 	} while (need_pass);
@@ -350,10 +347,10 @@ ConnectDatabase(Archive *AHX,
 	bool		need_pass = false;
 
 	if (AH->connection)
-		die_horribly(AH, "%s: already connected to database\n", progname);
+		die_horribly(AH, modulename, "already connected to database\n");
 
 	if (!dbname && !(dbname = getenv("PGDATABASE")))
-		die_horribly(AH, "%s: no database name specified\n", progname);
+		die_horribly(AH, modulename, "no database name specified\n");
 
 	AH->dbname = strdup(dbname);
 
@@ -376,7 +373,7 @@ ConnectDatabase(Archive *AHX,
 	{
 		password = simple_prompt("Password: ", 100, false);
 		if (password == NULL)
-			die_horribly(AH, "out of memory");
+			die_horribly(AH, modulename, "out of memory\n");
 		AH->requirePassword = true;
 	}
 	else
@@ -393,8 +390,7 @@ ConnectDatabase(Archive *AHX,
 									  AH->dbname, AH->username, password);
 
 		if (!AH->connection)
-			die_horribly(AH, "%s: Failed to connect (PQsetdbLogin failed).\n",
-						 progname);
+			die_horribly(AH, modulename, "failed to connect to database\n");
 
 		if (PQstatus(AH->connection) == CONNECTION_BAD &&
 			strcmp(PQerrorMessage(AH->connection), "fe_sendauth: no password supplied\n") == 0 &&
@@ -413,7 +409,7 @@ ConnectDatabase(Archive *AHX,
 
 	/* check to see that the backend connection was successfully made */
 	if (PQstatus(AH->connection) == CONNECTION_BAD)
-		die_horribly(AH, "Connection to database '%s' failed.\n%s\n",
+		die_horribly(AH, modulename, "connection to database \"%s\" failed: %s",
 					 AH->dbname, PQerrorMessage(AH->connection));
 
 	/* check for version mismatch */
@@ -432,9 +428,12 @@ ConnectDatabase(Archive *AHX,
 /* Public interface */
 /* Convenience function to send a query. Monitors result to handle COPY statements */
 int
-ExecuteSqlCommand(ArchiveHandle *AH, PQExpBuffer qry, char *desc)
+ExecuteSqlCommand(ArchiveHandle *AH, PQExpBuffer qry, char *desc, bool use_blob)
 {
-	return _executeSqlCommand(AH, AH->connection, qry, desc);
+	if (use_blob)
+		return _executeSqlCommand(AH, AH->blobConnection, qry, desc);
+	else
+		return _executeSqlCommand(AH, AH->connection, qry, desc);
 }
 
 /*
@@ -450,20 +449,20 @@ _executeSqlCommand(ArchiveHandle *AH, PGconn *conn, PQExpBuffer qry, char *desc)
 	/* fprintf(stderr, "Executing: '%s'\n\n", qry->data); */
 	res = PQexec(conn, qry->data);
 	if (!res)
-		die_horribly(AH, "%s: %s. No result from backend.\n", progname, desc);
+		die_horribly(AH, modulename, "%s: no result from backend\n", desc);
 
 	if (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
 		if (PQresultStatus(res) == PGRES_COPY_IN)
 		{
 			if (conn != AH->connection)
-				die_horribly(AH, "%s: COPY command execute in non-primary connection.\n", progname);
+				die_horribly(AH, modulename, "COPY command executed in non-primary connection\n");
 
 			AH->pgCopyIn = 1;
 		}
 		else
-			die_horribly(AH, "%s: %s. Code = %d. Explanation from backend: '%s'.\n",
-						 progname, desc, PQresultStatus(res), PQerrorMessage(AH->connection));
+			die_horribly(AH, modulename, "%s: %s",
+						 desc, PQerrorMessage(AH->connection));
 	}
 
 	PQclear(res);
@@ -545,7 +544,7 @@ ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qryv, int bufLen)
 				 */
 
 				if (PQputline(AH->connection, AH->pgCopyBuf->data) != 0)
-					die_horribly(AH, "%s: error returned by PQputline\n", progname);
+					die_horribly(AH, modulename, "error returned by PQputline\n");
 
 				resetPQExpBuffer(AH->pgCopyBuf);
 
@@ -557,7 +556,7 @@ ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qryv, int bufLen)
 				if (isEnd)
 				{
 					if (PQendcopy(AH->connection) != 0)
-						die_horribly(AH, "%s: error returned by PQendcopy\n", progname);
+						die_horribly(AH, modulename, "error returned by PQendcopy\n");
 
 					AH->pgCopyIn = 0;
 					break;
@@ -606,7 +605,7 @@ ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qryv, int bufLen)
 						 * fprintf(stderr, "    sending: '%s'\n\n",
 						 * AH->sqlBuf->data);
 						 */
-						ExecuteSqlCommand(AH, AH->sqlBuf, "Could not execute query");
+						ExecuteSqlCommand(AH, AH->sqlBuf, "could not execute query", false);
 						resetPQExpBuffer(AH->sqlBuf);
 						AH->sqlparse.lastChar = '\0';
 					}
@@ -696,8 +695,8 @@ FixupBlobRefs(ArchiveHandle *AH, char *tablename)
 
 	res = PQexec(AH->blobConnection, tblQry->data);
 	if (!res)
-		die_horribly(AH, "%s: could not find OID attrs of %s. Explanation from backend '%s'\n",
-					 progname, tablename, PQerrorMessage(AH->connection));
+		die_horribly(AH, modulename, "could not find oid columns of table \"%s\": %s",
+					 tablename, PQerrorMessage(AH->connection));
 
 	if ((n = PQntuples(res)) == 0)
 	{
@@ -730,14 +729,14 @@ FixupBlobRefs(ArchiveHandle *AH, char *tablename)
 
 		uRes = PQexec(AH->blobConnection, tblQry->data);
 		if (!uRes)
-			die_horribly(AH, "%s: could not update attr %s of table %s. Explanation from backend '%s'\n",
-						 progname, attr, tablename, PQerrorMessage(AH->blobConnection));
+			die_horribly(AH, modulename,
+						 "could not update column \"%s\" of table \"%s\": %s",
+						 attr, tablename, PQerrorMessage(AH->blobConnection));
 
 		if (PQresultStatus(uRes) != PGRES_COMMAND_OK)
-			die_horribly(AH, "%s: error while updating attr %s of table %s (result = %d)."
-						 " Explanation from backend '%s'\n",
-						 progname, attr, tablename, PQresultStatus(uRes),
-						 PQerrorMessage(AH->blobConnection));
+			die_horribly(AH, modulename,
+						 "error while updating column \"%s\" of table \"%s\": %s",
+						 attr, tablename, PQerrorMessage(AH->blobConnection));
 
 		PQclear(uRes);
 	}
@@ -762,12 +761,12 @@ CreateBlobXrefTable(ArchiveHandle *AH)
 
 	appendPQExpBuffer(qry, "Create Temporary Table %s(oldOid oid, newOid oid);", BLOB_XREF_TABLE);
 
-	_executeSqlCommand(AH, AH->blobConnection, qry, "can not create BLOB xref table '" BLOB_XREF_TABLE "'");
+	ExecuteSqlCommand(AH, qry, "could not create BLOB cross reference table", true);
 
 	resetPQExpBuffer(qry);
 
 	appendPQExpBuffer(qry, "Create Unique Index %s_ix on %s(oldOid)", BLOB_XREF_TABLE, BLOB_XREF_TABLE);
-	_executeSqlCommand(AH, AH->blobConnection, qry, "can not create index on BLOB xref table '" BLOB_XREF_TABLE "'");
+	ExecuteSqlCommand(AH, qry, "could not create index on BLOB cross reference table", true);
 }
 
 void
@@ -777,7 +776,7 @@ InsertBlobXref(ArchiveHandle *AH, int old, int new)
 
 	appendPQExpBuffer(qry, "Insert Into %s(oldOid, newOid) Values (%d, %d);", BLOB_XREF_TABLE, old, new);
 
-	_executeSqlCommand(AH, AH->blobConnection, qry, "can not create BLOB xref entry");
+	ExecuteSqlCommand(AH, qry, "could not create BLOB cross reference entry", true);
 }
 
 void
@@ -787,7 +786,7 @@ StartTransaction(ArchiveHandle *AH)
 
 	appendPQExpBuffer(qry, "Begin;");
 
-	ExecuteSqlCommand(AH, qry, "can not start database transaction");
+	ExecuteSqlCommand(AH, qry, "could not start database transaction", false);
 	AH->txActive = true;
 }
 
@@ -798,7 +797,8 @@ StartTransactionXref(ArchiveHandle *AH)
 
 	appendPQExpBuffer(qry, "Begin;");
 
-	_executeSqlCommand(AH, AH->blobConnection, qry, "can not start BLOB xref transaction");
+	ExecuteSqlCommand(AH, qry,
+					  "could not start transaction for BLOB cross references", true);
 	AH->blobTxActive = true;
 }
 
@@ -809,7 +809,7 @@ CommitTransaction(ArchiveHandle *AH)
 
 	appendPQExpBuffer(qry, "Commit;");
 
-	ExecuteSqlCommand(AH, qry, "can not commit database transaction");
+	ExecuteSqlCommand(AH, qry, "could not commit database transaction", false);
 	AH->txActive = false;
 }
 
@@ -820,6 +820,6 @@ CommitTransactionXref(ArchiveHandle *AH)
 
 	appendPQExpBuffer(qry, "Commit;");
 
-	_executeSqlCommand(AH, AH->blobConnection, qry, "can not commit BLOB xref transaction");
+	ExecuteSqlCommand(AH, qry, "could not commit transaction for BLOB cross references", true);
 	AH->blobTxActive = false;
 }
diff --git a/src/bin/pg_dump/pg_backup_db.h b/src/bin/pg_dump/pg_backup_db.h
index 44500e72c12dba1f006d9af2fbefed19fe869302..463526922d9cdc2891a4b2deb5f6fc1f6906441d 100644
--- a/src/bin/pg_dump/pg_backup_db.h
+++ b/src/bin/pg_dump/pg_backup_db.h
@@ -2,13 +2,13 @@
  *	Definitions for pg_backup_db.c
  *
  *	IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.h,v 1.4 2001/03/22 04:00:13 momjian Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.h,v 1.5 2001/06/27 21:21:37 petere Exp $
  */
 
 #define BLOB_XREF_TABLE "dump_blob_xref"		/* MUST be lower case */
 
 extern void FixupBlobRefs(ArchiveHandle *AH, char *tablename);
-extern int	ExecuteSqlCommand(ArchiveHandle *AH, PQExpBuffer qry, char *desc);
+extern int	ExecuteSqlCommand(ArchiveHandle *AH, PQExpBuffer qry, char *desc, bool use_blob);
 extern int	ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qry, int bufLen);
 
 extern void CreateBlobXrefTable(ArchiveHandle *AH);
diff --git a/src/bin/pg_dump/pg_backup_files.c b/src/bin/pg_dump/pg_backup_files.c
index 4d2e2d77671df9273257e535fcc5c52dc4c5999b..2bbf68cb650d750a77e60adfe5eab09ee00ea65c 100644
--- a/src/bin/pg_dump/pg_backup_files.c
+++ b/src/bin/pg_dump/pg_backup_files.c
@@ -20,7 +20,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.10 2001/04/01 05:42:51 pjw Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.11 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -36,9 +36,6 @@
 #include "pg_backup.h"
 #include "pg_backup_archiver.h"
 
-#include <stdlib.h>
-#include <string.h>
-
 static void _ArchiveEntry(ArchiveHandle *AH, TocEntry *te);
 static void _StartData(ArchiveHandle *AH, TocEntry *te);
 static int	_WriteData(ArchiveHandle *AH, const void *data, int dLen);
@@ -77,7 +74,7 @@ typedef struct
 	char	   *filename;
 } lclTocEntry;
 
-static char *progname = "Archiver(files)";
+static char *modulename = "file archiver";
 static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt);
 static void _getBlobTocEntry(ArchiveHandle *AH, int *oid, char *fname);
 
@@ -122,11 +119,9 @@ InitArchiveFmt_Files(ArchiveHandle *AH)
 	if (AH->mode == archModeWrite)
 	{
 
-		fprintf(stderr, "\n*************************************************************\n"
-				"* WARNING: This format is for demonstration purposes. It is   *\n"
-				"*          not intended for general use. Files will be dumped *\n"
-				"*          into the current working directory.                *\n"
-				"***************************************************************\n\n");
+		write_msg(modulename, "WARNING:\n"
+				  "  This format is for demonstration purposes, it is not intended for\n"
+				  "  normal use. Files will be written in the current working directory.\n");
 
 		if (AH->fSpec && strcmp(AH->fSpec, "") != 0)
 			AH->FH = fopen(AH->fSpec, PG_BINARY_W);
@@ -134,7 +129,7 @@ InitArchiveFmt_Files(ArchiveHandle *AH)
 			AH->FH = stdout;
 
 		if (AH->FH == NULL)
-			die_horribly(NULL, "%s: Could not open output file\n", progname);
+			die_horribly(NULL, modulename, "could not open output file: %s\n", strerror(errno));
 
 		ctx->hasSeek = (fseek(AH->FH, 0, SEEK_CUR) == 0);
 
@@ -152,7 +147,7 @@ InitArchiveFmt_Files(ArchiveHandle *AH)
 			AH->FH = stdin;
 
 		if (AH->FH == NULL)
-			die_horribly(NULL, "%s: Could not open input file\n", progname);
+			die_horribly(NULL, modulename, "could not open input file: %s\n", strerror(errno));
 
 		ctx->hasSeek = (fseek(AH->FH, 0, SEEK_CUR) == 0);
 
@@ -160,7 +155,7 @@ InitArchiveFmt_Files(ArchiveHandle *AH)
 		ReadToc(AH);
 		/* Nothing else in the file... */
 		if (fclose(AH->FH) != 0)
-			die_horribly(AH, "%s: Could not close TOC file (fclose failed).\n", progname);
+			die_horribly(AH, modulename, "could not close TOC file: %s\n", strerror(errno));
 	}
 
 }
@@ -250,7 +245,7 @@ _StartData(ArchiveHandle *AH, TocEntry *te)
 #endif
 
 	if (tctx->FH == NULL)
-		die_horribly(AH, "%s: Could not open data file for output\n", progname);
+		die_horribly(AH, modulename, "could not open data file for output\n");
 
 }
 
@@ -271,7 +266,7 @@ _EndData(ArchiveHandle *AH, TocEntry *te)
 
 	/* Close the file */
 	if (GZCLOSE(tctx->FH) != 0)
-		die_horribly(AH, "%s: could not close data file\n", progname);
+		die_horribly(AH, modulename, "could not close data file\n");
 
 	tctx->FH = NULL;
 }
@@ -295,7 +290,7 @@ _PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
 #endif
 
 	if (AH->FH == NULL)
-		die_horribly(AH, "%s: Could not open data file for input\n", progname);
+		die_horribly(AH, modulename, "could not open data file for input\n");
 
 	while ((cnt = GZREAD(buf, 1, 4095, AH->FH)) > 0)
 	{
@@ -304,7 +299,7 @@ _PrintFileData(ArchiveHandle *AH, char *filename, RestoreOptions *ropt)
 	}
 
 	if (GZCLOSE(AH->FH) != 0)
-		die_horribly(AH, "%s: could not close data file after reading\n", progname);
+		die_horribly(AH, modulename, "could not close data file after reading\n");
 
 }
 
@@ -368,7 +363,7 @@ _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
 	ctx->blobToc = fopen("blobs.toc", PG_BINARY_R);
 
 	if (ctx->blobToc == NULL)
-		die_horribly(AH, "%s: Could not open BLOB TOC for input\n", progname);
+		die_horribly(AH, modulename, "could not open BLOB TOC for input: %s\n", strerror(errno));
 
 	_getBlobTocEntry(AH, &oid, fname);
 
@@ -381,7 +376,7 @@ _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt)
 	}
 
 	if (fclose(ctx->blobToc) != 0)
-		die_horribly(AH, "%s: could not close BLOB TOC file\n", progname);
+		die_horribly(AH, modulename, "could not close BLOB TOC file: %s\n", strerror(errno));
 
 	EndRestoreBlobs(AH);
 }
@@ -393,7 +388,7 @@ _WriteByte(ArchiveHandle *AH, const int i)
 	lclContext *ctx = (lclContext *) AH->formatData;
 
 	if (fputc(i, AH->FH) == EOF)
-		die_horribly(AH, "%s: could not write byte\n", progname);
+		die_horribly(AH, modulename, "could not write byte\n");
 
 	ctx->filePos += 1;
 
@@ -420,7 +415,7 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, int len)
 
 	res = fwrite(buf, 1, len, AH->FH);
 	if (res != len)
-		die_horribly(AH, "%s: write error in _WriteBuf (%d != %d)\n", progname, res, len);
+		die_horribly(AH, modulename, "write error in _WriteBuf (%d != %d)\n", res, len);
 
 	ctx->filePos += res;
 	return res;
@@ -445,7 +440,7 @@ _CloseArchive(ArchiveHandle *AH)
 		WriteHead(AH);
 		WriteToc(AH);
 		if (fclose(AH->FH) != 0)
-			die_horribly(AH, "%s: could not close TOC file\n", progname);
+			die_horribly(AH, modulename, "could not close TOC file: %s\n", strerror(errno));
 		WriteDataChunks(AH);
 	}
 
@@ -478,7 +473,8 @@ _StartBlobs(ArchiveHandle *AH, TocEntry *te)
 	ctx->blobToc = fopen(fname, PG_BINARY_W);
 
 	if (ctx->blobToc == NULL)
-		die_horribly(AH, "%s: could not open BLOB TOC for output\n", progname);
+		die_horribly(AH, modulename,
+					 "could not open BLOB TOC for output: %s\n", strerror(errno));
 
 }
 
@@ -499,7 +495,7 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
 	char	   *sfx;
 
 	if (oid == 0)
-		die_horribly(AH, "%s: illegal OID for BLOB (%d)\n", progname, oid);
+		die_horribly(AH, modulename, "invalid OID for BLOB (%u)\n", oid);
 
 	if (AH->compression != 0)
 		sfx = ".gz";
@@ -518,7 +514,7 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
 #endif
 
 	if (tctx->FH == NULL)
-		die_horribly(AH, "%s: Could not open BLOB file\n", progname);
+		die_horribly(AH, modulename, "could not open BLOB file\n");
 }
 
 /*
@@ -533,7 +529,7 @@ _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
 	lclTocEntry *tctx = (lclTocEntry *) te->formatData;
 
 	if (GZCLOSE(tctx->FH) != 0)
-		die_horribly(AH, "%s: could not close BLOB file\n", progname);
+		die_horribly(AH, modulename, "could not close BLOB file\n");
 }
 
 /*
@@ -551,7 +547,7 @@ _EndBlobs(ArchiveHandle *AH, TocEntry *te)
 	/* WriteInt(AH, 0); */
 
 	if (fclose(ctx->blobToc) != 0)
-		die_horribly(AH, "%s: could not close BLOB TOC file\n", progname);
+		die_horribly(AH, modulename, "could not close BLOB TOC file: %s\n", strerror(errno));
 
 }
 
diff --git a/src/bin/pg_dump/pg_backup_null.c b/src/bin/pg_dump/pg_backup_null.c
index 0952c548fd41776ba8f56fb6226334a6467b8ca3..ee3b85eb4c85c1c7ee3faa5ec04767e72f5b5506 100644
--- a/src/bin/pg_dump/pg_backup_null.c
+++ b/src/bin/pg_dump/pg_backup_null.c
@@ -17,7 +17,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_null.c,v 1.6 2001/03/24 23:11:14 tgl Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_null.c,v 1.7 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 09-Jul-2000 - pjw@rhyme.com.au
  *
@@ -63,7 +63,7 @@ InitArchiveFmt_Null(ArchiveHandle *AH)
 	 * Now prevent reading...
 	 */
 	if (AH->mode == archModeRead)
-		die_horribly(AH, "%s: This format can not be read\n");
+		die_horribly(AH, NULL, "this format cannot be read\n");
 
 }
 
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index 8c67141cd3509f0bec4a7683f3415d545f11e20a..97001c27f67309bd4059ed32c6a45636bac1ac82 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -16,7 +16,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.15 2001/04/25 07:03:19 pjw Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.16 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -101,7 +101,7 @@ typedef struct
 	char	   *filename;
 } lclTocEntry;
 
-static char *progname = "Archiver(tar)";
+static char *modulename = "tar archiver";
 
 static void _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt);
 
@@ -172,7 +172,8 @@ InitArchiveFmt_Tar(ArchiveHandle *AH)
 			ctx->tarFH = stdout;
 
 		if (ctx->tarFH == NULL)
-			die_horribly(NULL, "%s: Could not open TOC file for output.\n", progname);
+			die_horribly(NULL, modulename,
+						 "could not open TOC file for output: %s\n", strerror(errno));
 
 		ctx->tarFHpos = 0;
 
@@ -197,7 +198,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH)
 		 * screws file positioning.
 		 */
 		if (AH->compression != 0)
-			die_horribly(NULL, "%s: Compression not supported in TAR output\n", progname);
+			die_horribly(NULL, modulename, "compression not supported by tar output format\n");
 
 	}
 	else
@@ -209,7 +210,7 @@ InitArchiveFmt_Tar(ArchiveHandle *AH)
 			ctx->tarFH = stdin;
 
 		if (ctx->tarFH == NULL)
-			die_horribly(NULL, "%s: Could not open TOC file for input\n", progname);
+			die_horribly(NULL, modulename, "could not open TOC file for input: %s\n", strerror(errno));
 
 		/*
 		 * Make unbuffered since we will dup() it, and the buffers screw
@@ -332,7 +333,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
 		{
 			if (filename)		/* Couldn't find the requested file.
 								 * Future: DO SEEK(0) and retry. */
-				die_horribly(AH, "%s: unable to find file '%s' in archive\n", progname, filename);
+				die_horribly(AH, modulename, "could not find file %s in archive\n", filename);
 			else
 /* Any file OK, non left, so return NULL */
 				return NULL;
@@ -343,7 +344,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
 		if (AH->compression == 0)
 			tm->nFH = ctx->tarFH;
 		else
-			die_horribly(AH, "%s: compression support is disabled in this format\n", progname);
+			die_horribly(AH, modulename, "compression support is disabled in this format\n");
 		/* tm->zFH = gzdopen(dup(fileno(ctx->tarFH)), "rb"); */
 
 #else
@@ -360,7 +361,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
 		tm->tmpFH = tmpfile();
 
 		if (tm->tmpFH == NULL)
-			die_horribly(AH, "%s: could not generate temp file name.\n", progname);
+			die_horribly(AH, modulename, "could not generate temporary file name: %s\n", strerror(errno));
 
 #ifdef HAVE_LIBZ
 
@@ -369,7 +370,7 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
 			sprintf(fmode, "wb%d", AH->compression);
 			tm->zFH = gzdopen(dup(fileno(tm->tmpFH)), fmode);
 			if (tm->zFH == NULL)
-				die_horribly(AH, "%s: could not gzdopen temp file.\n", progname);
+				die_horribly(AH, modulename, "could not gzdopen temporary file\n");
 
 		}
 		else
@@ -401,7 +402,7 @@ tarClose(ArchiveHandle *AH, TAR_MEMBER *th)
 	 */
 	if (AH->compression != 0)
 		if (GZCLOSE(th->zFH) != 0)
-			die_horribly(AH, "%s: could not close tar member\n", progname);
+			die_horribly(AH, modulename, "could not close tar member\n");
 
 	if (th->mode == 'w')
 		_tarAddFile(AH, th);	/* This will close the temp file */
@@ -502,13 +503,13 @@ _tarReadRaw(ArchiveHandle *AH, void *buf, int len, TAR_MEMBER *th, FILE *fh)
 				res = fread(&((char *) buf)[used], 1, len, th->nFH);
 		}
 		else
-			die_horribly(AH, "%s: neither th nor fh specified in tarReadRaw\n", progname);
+			die_horribly(AH, modulename, "neither th nor fh specified in tarReadRaw() (internal error)\n");
 	}
 
-	/*
-	 * fprintf(stderr, "%s: requested %d bytes, got %d from lookahead and
-	 * %d from file\n", progname, reqLen, used, res);
-	 */
+#if 0
+	write_msg(modulename, "requested %d bytes, got %d from lookahead and %d from file\n",
+			  reqLen, used, res);
+#endif
 
 	ctx->tarFHpos += res + used;
 
@@ -544,7 +545,8 @@ tarWrite(const void *buf, int len, TAR_MEMBER *th)
 		res = fwrite(buf, 1, len, th->nFH);
 
 	if (res != len)
-		die_horribly(th->AH, "%s: could not write to tar member (%d != %d)\n", progname, res, len);
+		die_horribly(th->AH, modulename,
+					 "could not write to tar member (wrote %d, attempted %d)\n", res, len);
 
 	th->pos += res;
 	return res;
@@ -631,7 +633,8 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 		 * OIDS, so we search the string for it in a paranoid sort of way.
 		 */
 		if (strncmp(tmpCopy, "copy ", 5) != 0)
-			die_horribly(AH, "%s: COPY statment badly formatted - could not find 'copy' in '%s'\n", progname, tmpCopy);
+			die_horribly(AH, modulename,
+						 "bad COPY statement - could not find \"copy\" in string \"%s\"\n", tmpCopy);
 
 		pos1 = 5;
 		for (pos1 = 5; pos1 < strlen(tmpCopy); pos1++)
@@ -648,8 +651,9 @@ _PrintTocData(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt)
 				break;
 
 		if (pos2 >= strlen(tmpCopy))
-			die_horribly(AH, "%s: COPY statment badly formatted - could not find 'from stdin' in '%s' starting at %d\n",
-						 progname, tmpCopy, pos1);
+			die_horribly(AH, modulename,
+						 "bad COPY statement - could not find \"from stdin\" in string \"%s\" starting at position %d\n",
+						 tmpCopy, pos1);
 
 		ahwrite(tmpCopy, 1, pos2, AH);	/* 'copy "table" [with oids]' */
 		ahprintf(AH, " from '$$PATH$$/%s' %s", tctx->filename, &tmpCopy[pos2 + 10]);
@@ -849,7 +853,8 @@ _CloseArchive(ArchiveHandle *AH)
 		for (i = 0; i < 512; i++)
 		{
 			if (fputc(0, ctx->tarFH) == EOF)
-				die_horribly(AH, "%s: could not write null block at end of TAR archive.\n", progname);
+				die_horribly(AH, modulename,
+							 "could not write null block at end of tar archive\n");
 		}
 
 	}
@@ -906,7 +911,7 @@ _StartBlob(ArchiveHandle *AH, TocEntry *te, Oid oid)
 	char	   *sfx;
 
 	if (oid == 0)
-		die_horribly(AH, "%s: illegal OID for BLOB (%d)\n", progname, oid);
+		die_horribly(AH, modulename, "invalid OID for BLOB (%u)\n", oid);
 
 	if (AH->compression != 0)
 		sfx = ".gz";
@@ -984,7 +989,7 @@ tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt,...)
 		bSize *= 2;
 		p = (char *) malloc(bSize);
 		if (p == NULL)
-			die_horribly(AH, "%s: could not allocate buffer for tarPrintf\n", progname);
+			die_horribly(AH, modulename, "out of memory\n");
 		va_start(ap, fmt);
 		cnt = vsnprintf(p, bSize, fmt, ap);
 		va_end(ap);
@@ -1044,22 +1049,22 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
 	{
 		res = fwrite(&buf[0], 1, cnt, th->tarFH);
 		if (res != cnt)
-			die_horribly(AH, "%s: write error appending to TAR archive (%d != %d).\n", progname, res, cnt);
+			die_horribly(AH, modulename, "write error appending to tar archive (wrote %d, attempted %d)\n", res, cnt);
 		len += res;
 	}
 
 	if (fclose(tmp) != 0)		/* This *should* delete it... */
-		die_horribly(AH, "%s: Could not close tar member (fclose failed).\n", progname);
+		die_horribly(AH, modulename, "could not close tar member: %s\n", strerror(errno));
 
 	if (len != th->fileLen)
-		die_horribly(AH, "%s: Actual file length does not match expected (%d vs. %d).\n",
-					 progname, len, th->pos);
+		die_horribly(AH, modulename, "actual file length (%d) does not match expected (%d)\n",
+					 len, th->pos);
 
 	pad = ((len + 511) & ~511) - len;
 	for (i = 0; i < pad; i++)
 	{
 		if (fputc('\0', th->tarFH) == EOF)
-			die_horribly(AH, "%s: Could not output padding at end of tar member.\n", progname);
+			die_horribly(AH, modulename, "could not output padding at end of tar member\n");
 	}
 
 	ctx->tarFHpos += len + pad;
@@ -1099,7 +1104,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename)
 	if (!_tarGetHeader(AH, th))
 	{
 		if (filename)
-			die_horribly(AH, "%s: unable to find header for %s\n", progname, filename);
+			die_horribly(AH, modulename, "could not find header for file %s in tar archive\n", filename);
 		else
 /* We're just scanning the archibe for the next file, so return null */
 		{
@@ -1114,9 +1119,9 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename)
 
 		id = atoi(th->targetFile);
 		if ((TocIDRequired(AH, id, AH->ropt) & 2) != 0)
-			die_horribly(AH, "%s: dumping data out of order is not supported in this archive format: "
-			"%s is required, but comes before %s in the archive file.\n",
-						 progname, th->targetFile, filename);
+			die_horribly(AH, modulename, "dumping data out of order is not supported in this archive format: "
+						 "%s is required, but comes before %s in the archive file.\n",
+						 th->targetFile, filename);
 
 		/* Header doesn't match, so read to next header */
 		len = ((th->fileLen + 511) & ~511);		/* Padded length */
@@ -1126,7 +1131,7 @@ _tarPositionTo(ArchiveHandle *AH, const char *filename)
 			_tarReadRaw(AH, &header[0], 512, NULL, ctx->tarFH);
 
 		if (!_tarGetHeader(AH, th))
-			die_horribly(AH, "%s: unable to find header for %s\n", progname, filename);
+			die_horribly(AH, modulename, "could not find header for file %s in tar archive\n", filename);
 
 	}
 
@@ -1152,12 +1157,12 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 
 	while (!gotBlock)
 	{
-
-		/*
-		 * if ( ftell(ctx->tarFH) != ctx->tarFHpos) die_horribly(AH, "%s:
-		 * mismatch in actual vs. predicted file pos - %d vs. %d\n",
-		 * progname, ftell(ctx->tarFH), ctx->tarFHpos);
-		 */
+#if 0
+		if (ftell(ctx->tarFH) != ctx->tarFHpos)
+			die_horribly(AH, modulename,
+						 "mismatch in actual vs. predicted file position (%d vs. %d)\n",
+						 ftell(ctx->tarFH), ctx->tarFHpos);
+#endif
 
 		/* Save the pos for reporting purposes */
 		hPos = ctx->tarFHpos;
@@ -1168,7 +1173,7 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 			return 0;
 
 		if (len != 512)
-			die_horribly(AH, "%s: incomplete tar header found (%d bytes)\n", progname, len);
+			die_horribly(AH, modulename, "incomplete tar header found (%d bytes)\n", len);
 
 		/* Calc checksum */
 		chk = _tarChecksum(&h[0]);
@@ -1200,9 +1205,10 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 	ahlog(AH, 3, "TOC Entry %s at %d (len=%d, chk=%d)\n", &name[0], hPos, len, sum);
 
 	if (chk != sum)
-		die_horribly(AH, "%s: corrupt tar header found in %s "
-		  "(expected %d (%o), computed %d (%o)) file position %d (%x)\n",
-					 progname, &name[0], sum, sum, chk, chk, ftell(ctx->tarFH), ftell(ctx->tarFH));
+		die_horribly(AH, modulename,
+					 "corrupt tar header found in %s "
+					 "(expected %d (%o), computed %d (%o)) file position %ld (%lx)\n",
+					 &name[0], sum, sum, chk, chk, ftell(ctx->tarFH), ftell(ctx->tarFH));
 
 	th->targetFile = strdup(name);
 	th->fileLen = len;
@@ -1277,6 +1283,6 @@ _tarWriteHeader(TAR_MEMBER *th)
 	}
 
 	if (fwrite(h, 1, 512, th->tarFH) != 512)
-		die_horribly(th->AH, "%s: unable to write tar header\n", progname);
+		die_horribly(th->AH, modulename, "unable to write tar header\n");
 
 }
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index d21f1db944d186d49fbe2131cda1deb7abad6aee..6d5d75410a9172db21575a8b780e0332299474ff 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -13,7 +13,7 @@
  *		  user-defined types
  *		  user-defined functions
  *		  tables
- *		  indices
+ *		  indexes
  *		  aggregates
  *		  operators
  *		  ACL - grant/revoke
@@ -22,7 +22,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.211 2001/06/01 16:09:55 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.212 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
  *
@@ -43,7 +43,7 @@
  *
  * Modifications - 6/1/97 - igor@sba.miami.edu
  * - Added functions to free allocated memory used for retrieving
- *	 indices,tables,inheritance,types,functions and aggregates.
+ *	 indexes,tables,inheritance,types,functions and aggregates.
  *	 No more leaks reported by Purify.
  *
  *
@@ -145,9 +145,9 @@
 
 #include <unistd.h>				/* for getopt() */
 #include <ctype.h>
-
-#include "pg_backup.h"
-
+#ifdef ENABLE_NLS
+#include <locale.h>
+#endif
 #ifdef HAVE_GETOPT_H
 #include <getopt.h>
 #endif
@@ -155,6 +155,10 @@
 #include <termios.h>
 #endif
 
+#ifndef HAVE_STRDUP
+#include "strdup.h"
+#endif
+
 #include "access/attnum.h"
 #include "access/htup.h"
 #include "catalog/pg_class.h"
@@ -163,12 +167,10 @@
 
 #include "libpq-fe.h"
 #include "libpq/libpq-fs.h"
-#ifndef HAVE_STRDUP
-#include "strdup.h"
-#endif
 
 #include "pg_dump.h"
 #include "pg_backup.h"
+#include "pg_backup_archiver.h"
 
 typedef enum _formatLiteralOptions
 {
@@ -238,84 +240,77 @@ typedef struct _dumpContext
 static void
 help(const char *progname)
 {
-	printf("%s dumps a database as a text file.\n\n", progname);
-	puts("Usage:");
-	printf("  %s [options] dbname\n\n", progname);
-	puts("Options:");
+	printf(gettext("%s dumps a database as a text file or to other formats.\n\n"), progname);
+	puts(gettext("Usage:"));
+	printf(gettext("  %s [options] dbname\n\n"), progname);
+	puts(gettext("Options:"));
 
 #ifdef HAVE_GETOPT_LONG
-	puts(
-	"  -a, --data-only          dump out only the data, not the schema\n"
-		 "  -b, --blobs              dump out blob data\n"
-	   "  -c, --clean              clean (drop) schema prior to create\n"
-		 "  -C, --create             output commands to create database\n"
-		 "  -d, --inserts            dump data as INSERT, rather than COPY, commands\n"
-		 "  -D, --attribute-inserts  dump data as INSERT commands with attribute names\n"
-		 "  -f, --file=FILENAME      specify output file name\n"
-		 "  -F, --format {c|t|p}     output file format (custom, tar, plain text)\n"
-		 "  -h, --host=HOSTNAME      server host name\n"
-		 "  -i, --ignore-version     proceed when database version != pg_dump version\n"
-	"  -n, --no-quotes          suppress most quotes around identifiers\n"
-	 "  -N, --quotes             enable most quotes around identifiers\n"
-		 "  -o, --oids               dump object ids (oids)\n"
-		 "  -O, --no-owner           do not output \\connect commands in plain text\n"
-		 "                           format\n"
-		 "  -p, --port=PORT          server port number\n"
-		 "  -R, --no-reconnect       disable ALL reconnections to the database in\n"
-		 "                           plain text format\n"
-		 "  -s, --schema-only        dump out only the schema, no data\n"
-		 "  -S, --superuser=NAME     specify the superuser user name to use in plain\n"
-		 "                           text format\n"
-	  "  -t, --table=TABLE        dump for this table only (* for all)\n"
-		 "  -U, --username=NAME      connect as specified database user\n"
-		 "  -v, --verbose            verbose\n"
-		 "  -W, --password           force password prompt (should happen automatically)\n"
-		 "  -x, --no-acl             do not dump ACL's (grant/revoke)\n"
-		 "  -Z, --compress {0-9}     compression level for compressed formats\n"
-		);
+	puts(gettext(
+		"  -a, --data-only          dump only the data, not the schema\n"
+		"  -b, --blobs              include BLOB data in dump\n"
+		"  -c, --clean              clean (drop) schema prior to create\n"
+		"  -C, --create             include commands to create database in dump\n"
+		"  -d, --inserts            dump data as INSERT, rather than COPY, commands\n"
+		"  -D, --attribute-inserts  dump data as INSERT commands with column names\n"
+		"  -f, --file=FILENAME      output file name\n"
+		"  -F, --format {c|t|p}     output file format (custom, tar, plain text)\n"
+		"  -h, --host=HOSTNAME      database server host name\n"
+		"  -i, --ignore-version     proceed even when server version mismatches\n"
+		"                           pg_dump version\n"
+		"  -n, --no-quotes          suppress most quotes around identifiers\n"
+		"  -N, --quotes             enable most quotes around identifiers\n"
+		"  -o, --oids               include oids in dump\n"
+		"  -O, --no-owner           do not output \\connect commands in plain\n"
+		"                           text format\n"
+		"  -p, --port=PORT          database server port number\n"
+		"  -R, --no-reconnect       disable ALL reconnections to the database in\n"
+		"                           plain text format\n"
+		"  -s, --schema-only        dump only the schema, no data\n"
+		"  -S, --superuser=NAME     specify the superuser user name to use in\n"
+		"                           plain text format\n"
+		"  -t, --table=TABLE        dump this table only (* for all)\n"
+		"  -U, --username=NAME      connect as specified database user\n"
+		"  -v, --verbose            verbose mode\n"
+		"  -W, --password           force password prompt (should happen automatically)\n"
+		"  -x, --no-acl             do not dump privileges (grant/revoke)\n"
+		"  -Z, --compress {0-9}     compression level for compressed formats\n"
+		));
 #else
-	puts(
-		 "  -a                       dump out only the data, no schema\n"
-		 "  -b                       dump out blob data\n"
-	   "  -c                       clean (drop) schema prior to create\n"
-		 "  -C                       output commands to create database\n"
-		 "  -d                       dump data as INSERT, rather than COPY, commands\n"
-		 "  -D                       dump data as INSERT commands with attribute names\n"
-		 "  -f FILENAME              specify output file name\n"
-		 "  -F {c|t|p}               output file format (custom, tar, plain text)\n"
-		 "  -h HOSTNAME              server host name\n"
-		 "  -i                       proceed when database version != pg_dump version\n"
-	"  -n                       suppress most quotes around identifiers\n"
-	 "  -N                       enable most quotes around identifiers\n"
-		 "  -o                       dump object ids (oids)\n"
-		 "  -O                       do not output \\connect commands in plain text\n"
-		 "                           format\n"
-		 "  -p PORT                  server port number\n"
-		 "  -R                       disable ALL reconnections to the database in\n"
-		 "                           plain text format\n"
-		 "  -s                       dump out only the schema, no data\n"
-		 "  -S NAME                  specify the superuser user name to use in plain\n"
-		 "                           text format\n"
-	  "  -t TABLE                 dump for this table only (* for all)\n"
-		 "  -U NAME                  connect as specified database user\n"
-		 "  -v                       verbose\n"
-		 "  -W                       force password prompt (should happen automatically)\n"
-		 "  -x                       do not dump ACL's (grant/revoke)\n"
-		 "  -Z {0-9}                 compression level for compressed formats\n"
-		);
+	puts(gettext(
+		"  -a                       dump only the data, not the schema\n"
+		"  -b                       include BLOB data in dump\n"
+		"  -c                       clean (drop) schema prior to create\n"
+		"  -C                       include commands to create database in dump\n"
+		"  -d                       dump data as INSERT, rather than COPY, commands\n"
+		"  -D                       dump data as INSERT commands with column names\n"
+		"  -f FILENAME              output file name\n"
+		"  -F {c|t|p}               output file format (custom, tar, plain text)\n"
+		"  -h HOSTNAME              database server host name\n"
+		"  -i                       proceed even when server version mismatches\n"
+		"                           pg_dump version\n"
+		"  -n                       suppress most quotes around identifiers\n"
+		"  -N                       enable most quotes around identifiers\n"
+		"  -o                       include oids in dump\n"
+		"  -O                       do not output \\connect commands in plain\n"
+		"                           text format\n"
+		"  -p PORT                  database server port number\n"
+		"  -R                       disable ALL reconnections to the database in\n"
+		"                           plain text format\n"
+		"  -s                       dump only the schema, no data\n"
+		"  -S NAME                  specify the superuser user name to use in\n"
+		"                           plain text format\n"
+		"  -t TABLE                 dump this table only (* for all)\n"
+		"  -U NAME                  connect as specified database user\n"
+		"  -v                       verbose mode\n"
+		"  -W                       force password prompt (should happen automatically)\n"
+		"  -x                       do not dump privileges (grant/revoke)\n"
+		"  -Z {0-9}                 compression level for compressed formats\n"
+		));
 #endif
-	puts("If no database name is not supplied, then the PGDATABASE environment\nvariable value is used.\n");
-	puts("Report bugs to <pgsql-bugs@postgresql.org>.");
-}
-
-
-static void
-version(void)
-{
-	puts("pg_dump (PostgreSQL) " PG_VERSION);
-	puts("Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group");
-	puts("Portions Copyright (c) 1996 Regents of the University of California");
-	puts("Read the file COPYRIGHT to see the usage and distribution terms.");
+	puts(gettext("If no database name is not supplied, then the PGDATABASE environment\n"
+				 "variable value is used.\n\n"
+				 "Report bugs to <pgsql-bugs@postgresql.org>."));
 }
 
 
@@ -362,7 +357,7 @@ dumpClasses_nodumpData(Archive *fout, char *oid, void *dctxv)
 		 *
 		 */
 
-		sprintf(query, "COPY %s WITH OIDS TO stdout;\n",
+		sprintf(query, "COPY %s WITH OIDS TO stdout;",
 				fmtId(classname, force_quotes));
 	}
 	else
@@ -376,27 +371,27 @@ dumpClasses_nodumpData(Archive *fout, char *oid, void *dctxv)
 		 *
 		 */
 
-		sprintf(query, "COPY %s TO stdout;\n", fmtId(classname, force_quotes));
+		sprintf(query, "COPY %s TO stdout;", fmtId(classname, force_quotes));
 	}
 	res = PQexec(g_conn, query);
 	if (!res ||
 		PQresultStatus(res) == PGRES_FATAL_ERROR)
 	{
-		fprintf(stderr, "SQL query to dump the contents of Table '%s' "
-				"did not execute.  Explanation from backend: '%s'.\n"
-				"The query was: '%s'.\n",
-				classname, PQerrorMessage(g_conn), query);
+		write_msg(NULL, "SQL command to dump the contents of table \"%s\" failed\n",
+				  classname);
+		write_msg(NULL, "Error message from server: %s", PQerrorMessage(g_conn));
+		write_msg(NULL, "The command was: %s\n", query);
 		exit_nicely(g_conn);
 	}
 	else
 	{
 		if (PQresultStatus(res) != PGRES_COPY_OUT)
 		{
-			fprintf(stderr, "SQL query to dump the contents of Table '%s' "
-					"executed abnormally.\n"
-					"PQexec() returned status %d when %d was expected.\n"
-					"The query was: '%s'.\n",
-				  classname, PQresultStatus(res), PGRES_COPY_OUT, query);
+			write_msg(NULL, "SQL command to dump the contents of table \"%s\" executed abnormally.\n",
+					  classname);
+			write_msg(NULL, "The server returned status %d when %d was expected.\n", 
+					  PQresultStatus(res), PGRES_COPY_OUT);
+			write_msg(NULL, "The command was: %s\n", query);
 			exit_nicely(g_conn);
 		}
 		else
@@ -479,12 +474,9 @@ dumpClasses_nodumpData(Archive *fout, char *oid, void *dctxv)
 		ret = PQendcopy(g_conn);
 		if (ret != 0)
 		{
-			fprintf(stderr, "SQL query to dump the contents of Table '%s' "
-					"did not execute correctly.  After we read all the "
-				 "table contents from the backend, PQendcopy() failed.  "
-					"Explanation from backend: '%s'.\n"
-					"The query was: '%s'.\n",
-					classname, PQerrorMessage(g_conn), query);
+			write_msg(NULL, "SQL command to dump the contents of table \"%s\" failed: PQendcopy() failed.\n", classname);
+			write_msg(NULL, "Error message from server: %s", PQerrorMessage(g_conn));
+			write_msg(NULL, "The command was: %s\n", query);
 			PQclear(res);
 			exit_nicely(g_conn);
 		}
@@ -515,8 +507,9 @@ dumpClasses_dumpData(Archive *fout, char *oid, void *dctxv)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpClasses(): command failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "dumpClasses(): SQL command failed\n");
+		write_msg(NULL, "Error message from server: %s", PQerrorMessage(g_conn));
+		write_msg(NULL, "The command was: %s\n", q->data);
 		exit_nicely(g_conn);
 	}
 	for (tuple = 0; tuple < PQntuples(res); tuple++)
@@ -707,7 +700,6 @@ int
 main(int argc, char **argv)
 {
 	int			c;
-	const char *progname;
 	const char *filename = NULL;
 	const char *format = "p";
 	const char *dbname = NULL;
@@ -764,6 +756,12 @@ main(int argc, char **argv)
 
 #endif
 
+#ifdef ENABLE_NLS
+	setlocale(LC_ALL, "");
+	bindtextdomain("pg_dump", LOCALEDIR);
+	textdomain("pg_dump");
+#endif
+
 	g_verbose = false;
 	force_quotes = true;
 
@@ -794,7 +792,7 @@ main(int argc, char **argv)
 		}
 		if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
 		{
-			version();
+			puts("pg_dump (PostgreSQL) " PG_VERSION);
 			exit(0);
 		}
 	}
@@ -946,20 +944,17 @@ main(int argc, char **argv)
 				compressLevel = atoi(optarg);
 				break;
 
-			case 'V':
-				version();
-				exit(0);
-				break;
-
 #ifndef HAVE_GETOPT_LONG
 			case '-':
-				fprintf(stderr, "%s was compiled without support for long options.\n"
-				"Use --help for help on invocation options.\n", progname);
+				fprintf(stderr,
+						gettext("%s was compiled without support for long options.\n"
+								"Use --help for help on invocation options.\n"),
+						progname);
 				exit(1);
 				break;
 #endif
 			default:
-				fprintf(stderr, "Try '%s --help' for more information.\n", progname);
+				fprintf(stderr, gettext("Try '%s --help' for more information.\n"), progname);
 				exit(1);
 		}
 	}
@@ -967,9 +962,9 @@ main(int argc, char **argv)
 	if (optind < (argc - 1))
 	{
 		fprintf(stderr,
-				"%s: extra parameters found on command line after '%s' (first is '%s').\n"
-				"Please respecify command.\nUse --help for help on invocation options.\n",
-				progname, argv[optind], argv[optind + 1]);
+				gettext("%s: too many command line options (first is '%s')\n"
+						"Try '%s --help' for more information.\n"),
+				progname, argv[optind + 1], progname);
 		exit(1);
 	}
 
@@ -980,41 +975,34 @@ main(int argc, char **argv)
 		dbname = getenv("PGDATABASE");
 	if (!dbname)
 	{
-		fprintf(stderr,
-				"%s: no database name specified\n",
-				progname);
+		write_msg(NULL, "no database name specified\n");
 		exit(1);
 	}
 
 	if (dataOnly && schemaOnly)
 	{
-		fprintf(stderr,
-		 "%s: 'Schema Only' and 'Data Only' are incompatible options.\n",
-				progname);
+		write_msg(NULL, "'Schema only' and 'data only' are incompatible options.\n");
 		exit(1);
 	}
 
 	if (outputBlobs && tablename != NULL && strlen(tablename) > 0)
 	{
-		fprintf(stderr,
-				"%s: BLOB output is not supported for a single table. Use all tables or a full dump instead.\n",
-				progname);
+		write_msg(NULL, "BLOB output is not supported for a single table.\n");
+		write_msg(NULL, "Use all tables or a full dump instead.\n");
 		exit(1);
 	}
 
 	if (dumpData == true && oids == true)
 	{
-		fprintf(stderr,
-				"%s: INSERT's can not set oids, so INSERT and OID options can not be used together.\n",
-				progname);
+		write_msg(NULL, "INSERT (-d, -D) and OID (-o) options cannot be used together.\n");
+		write_msg(NULL, "(The INSERT command cannot set oids.)\n");
 		exit(1);
 	}
 
 	if (outputBlobs == true && (format[0] == 'p' || format[0] == 'P'))
 	{
-		fprintf(stderr,
-				"%s: BLOB output is not supported for plain text dump files. Use a different output format.\n",
-				progname);
+		write_msg(NULL, "BLOB output is not supported for plain text dump files.\n");
+		write_msg(NULL, "(Use a different output format.)\n");
 		exit(1);
 	}
 
@@ -1044,16 +1032,13 @@ main(int argc, char **argv)
 			break;
 
 		default:
-			fprintf(stderr,
-					"%s: invalid output format '%s' specified\n", progname, format);
+			write_msg(NULL, "invalid output format '%s' specified\n", format);
 			exit(1);
 	}
 
 	if (g_fout == NULL)
 	{
-		fprintf(stderr,
-				"%s: could not open output file named %s for writing\n",
-				progname, filename);
+		write_msg(NULL, "could not open output file %s for writing\n", filename);
 		exit(1);
 	}
 
@@ -1076,13 +1061,13 @@ main(int argc, char **argv)
 
 		res = PQexec(g_conn, "begin");
 		if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
-			exit_horribly(g_fout, "BEGIN command failed. Explanation from backend: '%s'.\n",
+			exit_horribly(g_fout, NULL, "BEGIN command failed: %s",
 						  PQerrorMessage(g_conn));
 
 		PQclear(res);
 		res = PQexec(g_conn, "set transaction isolation level serializable");
 		if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
-			exit_horribly(g_fout, "SET TRANSACTION command failed. Explanation from backend: '%s'.\n",
+			exit_horribly(g_fout, NULL, "could not set transaction isolation level to serializable: %s",
 						  PQerrorMessage(g_conn));
 
 		PQclear(res);
@@ -1189,16 +1174,24 @@ dumpDatabase(Archive *AH)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getDatabase(): SELECT failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "SQL command failed\n");
+		write_msg(NULL, "Error message from server: %s", PQerrorMessage(g_conn));
+		write_msg(NULL, "The command was: %s\n", dbQry->data);
 		exit_nicely(g_conn);
 	}
 
 	ntups = PQntuples(res);
 
+	if (ntups <= 0)
+	{
+		write_msg(NULL, "missing pg_database entry for database \"%s\"\n", PQdb(g_conn));
+		exit_nicely(g_conn);
+	}
+
 	if (ntups != 1)
 	{
-		fprintf(stderr, "getDatabase(): SELECT returned %d databases.\n", ntups);
+		write_msg(NULL, "query returned more than one (%d) pg_database entry for database \"%s\"\n",
+				  ntups, PQdb(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1252,8 +1245,7 @@ dumpBlobs(Archive *AH, char *junkOid, void *junkVal)
 	res = PQexec(g_conn, oidQry->data);
 	if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "dumpBlobs(): Declare Cursor failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "dumpBlobs(): cursor declaration failed: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1268,7 +1260,8 @@ dumpBlobs(Archive *AH, char *junkOid, void *junkVal)
 
 		if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "dumpBlobs(): Fetch Cursor failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			write_msg(NULL, "dumpBlobs(): fetch from cursor failed: %s",
+					  PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 
@@ -1280,8 +1273,8 @@ dumpBlobs(Archive *AH, char *junkOid, void *junkVal)
 			loFd = lo_open(g_conn, blobOid, INV_READ);
 			if (loFd == -1)
 			{
-				fprintf(stderr, "dumpBlobs(): Could not open large object.  "
-						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				write_msg(NULL, "dumpBlobs(): could not open large object: %s",
+						  PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
@@ -1293,8 +1286,8 @@ dumpBlobs(Archive *AH, char *junkOid, void *junkVal)
 				cnt = lo_read(g_conn, loFd, buf, loBufSize);
 				if (cnt < 0)
 				{
-					fprintf(stderr, "dumpBlobs(): Error reading large object. "
-							" Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+					write_msg(NULL, "dumpBlobs(): error reading large object: %s",
+							  PQerrorMessage(g_conn));
 					exit_nicely(g_conn);
 				}
 
@@ -1378,7 +1371,7 @@ getTypes(int *numTypes)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getTypes(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of data types failed: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1422,7 +1415,8 @@ getTypes(int *numTypes)
 		tinfo[i].typedefn = strdup(PQgetvalue(res, i, i_typedefn));
 
 		if (strlen(tinfo[i].usename) == 0)
-			fprintf(stderr, "WARNING: owner of type '%s' appears to be invalid\n", tinfo[i].typname);
+			write_msg(NULL, "WARNING: owner of data type %s appears to be invalid\n",
+					  tinfo[i].typname);
 
 		if (strcmp(PQgetvalue(res, i, i_typbyval), "f") == 0)
 			tinfo[i].passedbyvalue = 0;
@@ -1495,7 +1489,7 @@ getOperators(int *numOprs)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getOperators(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of operators failed: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1537,8 +1531,8 @@ getOperators(int *numOprs)
 		oprinfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
 
 		if (strlen(oprinfo[i].usename) == 0)
-			fprintf(stderr, "WARNING: owner of operator '%s' appears to be invalid\n",
-					oprinfo[i].oprname);
+			write_msg(NULL, "WARNING: owner of operator \"%s\" appears to be invalid\n",
+					  oprinfo[i].oprname);
 
 	}
 
@@ -1745,14 +1739,14 @@ clearOprInfo(OprInfo *opr, int numOprs)
 }
 
 void
-clearIndInfo(IndInfo *ind, int numIndices)
+clearIndInfo(IndInfo *ind, int numIndexes)
 {
 	int			i,
 				a;
 
 	if (!ind)
 		return;
-	for (i = 0; i < numIndices; ++i)
+	for (i = 0; i < numIndexes; ++i)
 	{
 		if (ind[i].indoid)
 			free(ind[i].indoid);
@@ -1859,8 +1853,8 @@ getAggregates(int *numAggs)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getAggregates(): SELECT failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of aggregate functions failed: %s\n",
+				  PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -1890,8 +1884,8 @@ getAggregates(int *numAggs)
 		agginfo[i].agginitval = strdup(PQgetvalue(res, i, i_agginitval));
 		agginfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
 		if (strlen(agginfo[i].usename) == 0)
-			fprintf(stderr, "WARNING: owner of aggregate '%s' appears to be invalid\n",
-					agginfo[i].aggname);
+			write_msg(NULL, "WARNING: owner of aggregate function \"%s\" appears to be invalid\n",
+					  agginfo[i].aggname);
 
 		agginfo[i].convertok = (PQgetvalue(res, i, i_convertok)[0] == 't');
 
@@ -1960,8 +1954,8 @@ getFuncs(int *numFuncs)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getFuncs(): SELECT failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of functions failed: %s",
+				  PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -2003,13 +1997,13 @@ getFuncs(int *numFuncs)
 		finfo[i].isstrict = (strcmp(PQgetvalue(res, i, i_isstrict), "t") == 0);
 
 		if (strlen(finfo[i].usename) == 0)
-			fprintf(stderr, "WARNING: owner of function '%s' appears to be invalid\n",
-					finfo[i].proname);
+			write_msg(NULL, "WARNING: owner of function \"%s\" appears to be invalid\n",
+					  finfo[i].proname);
 
 		if (finfo[i].nargs < 0 || finfo[i].nargs > FUNC_MAX_ARGS)
 		{
-			fprintf(stderr, "getFuncs(): failed sanity check: %s has %d args\n",
-					finfo[i].proname, finfo[i].nargs);
+			write_msg(NULL, "failed sanity check: function %s has more than %d (namely %d) arguments\n",
+					  finfo[i].proname, FUNC_MAX_ARGS, finfo[i].nargs);
 			exit(1);
 		}
 		parseNumericArray(PQgetvalue(res, i, i_proargtypes),
@@ -2026,7 +2020,7 @@ getFuncs(int *numFuncs)
 
 /*
  * getTables
- *	  read all the user-defined tables (no indices, no catalogs)
+ *	  read all the user-defined tables (no indexes, no catalogs)
  * in the system catalogs return them in the TableInfo* structure
  *
  * numTables is set to the number of tables read in
@@ -2058,7 +2052,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 	relkindview[1] = '\0';
 
 	/*
-	 * find all the user-defined tables (no indices and no catalogs),
+	 * find all the user-defined tables (no indexes and no catalogs),
 	 * ordering by oid is important so that we always process the parent
 	 * tables before the child tables when traversing the tblinfo*
 	 *
@@ -2103,8 +2097,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getTables(): SELECT failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of tables failed: %s",
+				  PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -2134,8 +2128,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 		tblinfo[i].ntrig = atoi(PQgetvalue(res, i, i_reltriggers));
 
 		if (strlen(tblinfo[i].usename) == 0)
-			fprintf(stderr, "WARNING: owner of table '%s' appears to be invalid\n",
-					tblinfo[i].relname);
+			write_msg(NULL, "WARNING: owner of table \"%s\" appears to be invalid\n",
+					  tblinfo[i].relname);
 
 		/* Get view definition */
 		if (strcmp(PQgetvalue(res, i, i_relkind), relkindview) == 0)
@@ -2154,31 +2148,26 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 			res2 = PQexec(g_conn, query->data);
 			if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for VIEW DEFINITION) failed.  "
-						"Explanation from backend: %s",
-						PQerrorMessage(g_conn));
+				write_msg(NULL, "query to obtain definition of view \"%s\" failed: %s",
+						  tblinfo[i].relname, PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
 			if (PQntuples(res2) != 1)
 			{
 				if (PQntuples(res2) < 1)
-				{
-					fprintf(stderr, "getTables(): SELECT (for VIEW %s) returned no definitions\n",
-							tblinfo[i].relname);
-				}
+					write_msg(NULL, "query to obtain definition of view \"%s\" returned no data\n",
+							  tblinfo[i].relname);
 				else
-				{
-					fprintf(stderr, "getTables(): SELECT (for VIEW %s) returned more than 1 definition\n",
+					write_msg(NULL, "query to obtain definition of view \"%s\" returned more than one definition\n",
 							tblinfo[i].relname);
-				}
 				exit_nicely(g_conn);
 			}
 
 			if (PQgetisnull(res2, 0, 1))
 			{
-				fprintf(stderr, "getTables(): SELECT (for VIEW %s) returned NULL oid\n", tblinfo[i].relname);
-				fprintf(stderr, "SELECT was: %s\n", query->data);
+				write_msg(NULL, "query to obtain definition of view \"%s\" returned NULL oid\n",
+						  tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
 
@@ -2187,8 +2176,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 
 			if (strlen(tblinfo[i].viewdef) == 0)
 			{
-				fprintf(stderr, "getTables(): SELECT (for VIEW %s) returned empty definition",
-						tblinfo[i].relname);
+				write_msg(NULL, "definition of view \"%s\" appears to be empty (length zero)\n",
+						  tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
 		}
@@ -2235,16 +2224,15 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 			if (!res2 ||
 				PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for CHECK) failed.  "
-						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				write_msg(NULL, "query to obtain check constraints failed: %s", PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			ntups2 = PQntuples(res2);
 			if (ntups2 > tblinfo[i].ncheck)
 			{
-				fprintf(stderr, "getTables(): relation '%s': a maximum of %d CHECKs "
-									"were expected, but got %d\n",
-						tblinfo[i].relname, tblinfo[i].ncheck, ntups2);
+				write_msg(NULL, "expected %d check constraints on table \"%s\" but found %d\n",
+						  tblinfo[i].ncheck, tblinfo[i].relname, ntups2);
+				write_msg(NULL, "(The system catalogs might be corrupted.)\n");
 				exit_nicely(g_conn);
 			}
 
@@ -2285,14 +2273,14 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 			res2 = PQexec(g_conn, query->data);
 			if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for PRIMARY KEY) failed on table %s.  Explanation from backend: %s\n",
-						tblinfo[i].relname, PQerrorMessage(g_conn));
+				write_msg(NULL, "query to obtain primary key of table \"%s\" failed: %s",
+						  tblinfo[i].relname, PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
 			if (PQntuples(res2) > 1)
 			{
-				fprintf(stderr, "getTables(): SELECT (for PRIMARY KEY) produced more than one row on table %s.\n",
+				write_msg(NULL, "query to obtain primary key of table \"%s\" produced more than one result\n",
 						tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
@@ -2342,28 +2330,24 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 			res2 = PQexec(g_conn, query->data);
 			if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for PRIMARY KEY NAME) failed for table %s.  Explanation from backend: %s",
-						tblinfo[i].relname, PQerrorMessage(g_conn));
+				write_msg(NULL, "query to obtain name of primary key of table \"%s\" failed: %s",
+						  tblinfo[i].relname, PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
 			n = PQntuples(res2);
 			if (n != 1)
 			{
-				fprintf(stderr,
-						"getTables(): SELECT (for PRIMARY KEY NAME) failed for table %s. "
-						"This is impossible but object with OID == %s have %d primary keys.\n",
-						tblinfo[i].relname,
-						tblinfo[i].oid,
-						n);
+				write_msg(NULL, "query to obtain name of primary key of table \"%s\" did not return exactly one result\n",
+						  tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
 
 			/* Sanity check on LOJ */
 			if (PQgetisnull(res2, 0, 0))
 			{
-				fprintf(stderr, "getTables(): SELECT (for PRIMARY KEY NAME) on table %s returned NULL value.\n",
-						tblinfo[i].relname);
+				write_msg(NULL, "name of primary key of table \"%s\" returned NULL value\n",
+						  tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
 
@@ -2371,7 +2355,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 				strdup(fmtId(PQgetvalue(res2, 0, 0), force_quotes));
 			if (tblinfo[i].primary_key_name == NULL)
 			{
-				perror("strdup");
+				write_msg(NULL, "out of memory\n");
 				exit(1);
 			}
 		}
@@ -2417,15 +2401,14 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 			if (!res2 ||
 				PQresultStatus(res2) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "getTables(): SELECT (for TRIGGER) failed.  "
-						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				write_msg(NULL, "query to obtain list of triggers failed: %s", PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 			ntups2 = PQntuples(res2);
 			if (ntups2 != tblinfo[i].ntrig)
 			{
-				fprintf(stderr, "getTables(): relation '%s': %d Triggers were expected, but got %d\n",
-						tblinfo[i].relname, tblinfo[i].ntrig, ntups2);
+				write_msg(NULL, "expected %d triggers on table \"%s\" but found %d\n",
+						  tblinfo[i].ntrig, tblinfo[i].relname, ntups2);
 				exit_nicely(g_conn);
 			}
 			i_tgname = PQfnumber(res2, "tgname");
@@ -2504,8 +2487,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 					r = PQexec(g_conn, query->data);
 					if (!r || PQresultStatus(r) != PGRES_TUPLES_OK)
 					{
-						fprintf(stderr, "getTables(): SELECT (funcname) failed for trigger %s.  Explanation from backend: '%s'.\n",
-								tgname, PQerrorMessage(g_conn));
+						write_msg(NULL, "query to obtain procedure name for trigger \"%s\" failed: %s",
+								  tgname, PQerrorMessage(g_conn));
 						exit_nicely(g_conn);
 					}
 
@@ -2513,8 +2496,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 					numFuncs = PQntuples(r);
 					if (numFuncs != 1)
 					{
-						fprintf(stderr, "getTables(): SELECT (funcname) for trigger %s returned %d tuples. Expected 1.\n",
-								tgname, numFuncs);
+						write_msg(NULL, "query to obtain procedure name for trigger \"%s\" did not return exactly one result\n",
+								  tgname);
 						exit_nicely(g_conn);
 					}
 
@@ -2576,9 +2559,8 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 
 						if (PQgetisnull(res2, i2, i_tgconstrrelname))
 						{
-							fprintf(stderr, "getTables(): SELECT produced NULL referenced table name "
-											"for trigger '%s' on relation '%s' (oid was %s).\n",
-											tgname, tblinfo[i].relname, tgconstrrelid);
+							write_msg(NULL, "query produced NULL referenced table name for trigger \"%s\" on table \"%s\" (oid was %s)\n",
+									  tgname, tblinfo[i].relname, tgconstrrelid);
 							exit_nicely(g_conn);
 						}
 
@@ -2607,11 +2589,10 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
 						p = strchr(p, '\\');
 						if (p == NULL)
 						{
-							fprintf(stderr, "getTables(): relation '%s': bad argument "
-									"string (%s) for trigger '%s'\n",
-									tblinfo[i].relname,
-									PQgetvalue(res2, i2, i_tgargs),
-									tgname);
+							write_msg(NULL, "bad argument string (%s) for trigger \"%s\" on table \"%s\"\n",
+									  PQgetvalue(res2, i2, i_tgargs),
+									  tgname,
+									  tblinfo[i].relname);
 							exit_nicely(g_conn);
 						}
 						p++;
@@ -2696,8 +2677,8 @@ getInherits(int *numInherits)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getInherits(): SELECT failed.  Explanation from backend: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain inheritance relationships failed: %s",
+				  PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -2799,8 +2780,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 		if (!res ||
 			PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "getTableAttrs(): SELECT failed.  "
-			"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+			write_msg(NULL, "query to get table columns failed: %s", PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 
@@ -2829,12 +2809,11 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 		tblinfo[i].numParents = 0;
 		for (j = 0; j < ntups; j++)
 		{
-
 			/* Sanity check on LOJ */
 			if (PQgetisnull(res, j, i_typname))
 			{
-				fprintf(stderr, "getTableAttrs(): SELECT produced NULL attribute type name for attr %d on table %s.\n",
-						j, tblinfo[i].relname);
+				write_msg(NULL, "query produced NULL name for data type of column %d of table %s\n",
+						  j+1, tblinfo[i].relname);
 				exit_nicely(g_conn);
 			}
 
@@ -2868,8 +2847,8 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 				if (!res2 ||
 					PQresultStatus(res2) != PGRES_TUPLES_OK)
 				{
-					fprintf(stderr, "getTableAttrs(): SELECT (for DEFAULT) failed.  "
-							"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+					write_msg(NULL, "query to get column default value failed: %s",
+							  PQerrorMessage(g_conn));
 					exit_nicely(g_conn);
 				}
 
@@ -2877,8 +2856,8 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 				numAttr = PQntuples(res2);
 				if (numAttr != 1)
 				{
-					fprintf(stderr, "getTableAttrs(): SELECT (for DEFAULT) for attr %s returned %d tuples. Expected 1.\n",
-							tblinfo[i].attnames[j], numAttr);
+					write_msg(NULL, "query to get default value for column \"%s\" returned %d rows; expected 1\n",
+							  tblinfo[i].attnames[j], numAttr);
 					exit_nicely(g_conn);
 				}
 
@@ -2894,16 +2873,16 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
 
 
 /*
- * getIndices
- *	  read all the user-defined indices information
+ * getIndexes
+ *	  read all the user-defined indexes information
  * from the system catalogs return them in the InhInfo* structure
  *
- * numIndices is set to the number of indices read in
+ * numIndexes is set to the number of indexes read in
  *
  *
  */
 IndInfo    *
-getIndices(int *numIndices)
+getIndexes(int *numIndexes)
 {
 	int			i;
 	PQExpBuffer query = createPQExpBuffer();
@@ -2923,10 +2902,10 @@ getIndices(int *numIndices)
 	int			i_indisprimary;
 
 	/*
-	 * find all the user-defined indices. We do not handle partial
-	 * indices.
+	 * find all the user-defined indexes. We do not handle partial
+	 * indexes.
 	 *
-	 * Notice we skip indices on system classes
+	 * Notice we skip indexes on system classes
 	 *
 	 * this is a 4-way join !!
 	 *
@@ -2950,14 +2929,13 @@ getIndices(int *numIndices)
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "getIndices(): SELECT failed.  "
-			"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of indexes failed: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
 	ntups = PQntuples(res);
 
-	*numIndices = ntups;
+	*numIndexes = ntups;
 
 	indinfo = (IndInfo *) malloc(ntups * sizeof(IndInfo));
 
@@ -3031,8 +3009,8 @@ dumpComment(Archive *fout, const char *target, const char *oid)
 	res = PQexec(g_conn, query->data);
 	if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "DumpComment: SELECT failed: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to get comment on oid %s failed: %s",
+				   oid, PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -3086,8 +3064,8 @@ dumpDBComment(Archive *fout)
 	res = PQexec(g_conn, query->data);
 	if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpDBComment: SELECT failed: '%s'.\n",
-				PQerrorMessage(g_conn));
+		write_msg(NULL, "query to get database oid failed: %s",
+				   PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
@@ -3186,8 +3164,8 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
 			elemType = findTypeByOid(tinfo, numTypes, tinfo[i].typelem, zeroAsOpaque);
 			if (elemType == NULL)
 			{
-				fprintf(stderr, "Notice: array type %s - type for elements (oid %s) is not dumped.\n",
-						tinfo[i].typname, tinfo[i].typelem);
+				write_msg(NULL, "Notice: array type %s - type for elements (oid %s) is not dumped.\n",
+						  tinfo[i].typname, tinfo[i].typelem);
 				resetPQExpBuffer(q);
 				resetPQExpBuffer(delq);
 				continue;
@@ -3253,7 +3231,8 @@ dumpProcLangs(Archive *fout, FuncInfo *finfo, int numFuncs,
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpProcLangs(): SELECT failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "query to obtain list of procedural languages failed: %s",
+				   PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	ntups = PQntuples(res);
@@ -3280,8 +3259,8 @@ dumpProcLangs(Archive *fout, FuncInfo *finfo, int numFuncs,
 		}
 		if (fidx >= numFuncs)
 		{
-			fprintf(stderr, "dumpProcLangs(): handler procedure for "
-			   "language %s not found\n", PQgetvalue(res, i, i_lanname));
+			write_msg(NULL, "handler procedure for procedural language %s not found\n",
+					   PQgetvalue(res, i, i_lanname));
 			exit_nicely(g_conn);
 		}
 
@@ -3370,14 +3349,14 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
 	if (!res ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpOneFunc(): SELECT for procedural language failed.  Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "query to get name of procedural language failed: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	nlangs = PQntuples(res);
 
 	if (nlangs != 1)
 	{
-		fprintf(stderr, "dumpOneFunc(): procedural language for function %s not found\n", finfo[i].proname);
+		write_msg(NULL, "procedural language for function %s not found\n", finfo[i].proname);
 		exit_nicely(g_conn);
 	}
 
@@ -3419,11 +3398,11 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
 		typname = findTypeByOid(tinfo, numTypes, finfo[i].argtypes[j], zeroAsOpaque);
 		if (typname == NULL)
 		{
-			fprintf(stderr, "Notice: function \"%s\" is not dumped.\n",
-					finfo[i].proname);
+			write_msg(NULL, "Notice: function \"%s\" not dumped\n",
+					   finfo[i].proname);
 
-			fprintf(stderr, "Reason: the %d th argument type name (oid %s) not found.\n",
-					j, finfo[i].argtypes[j]);
+			write_msg(NULL, "Reason: data type name of argument %d (oid %s) not found\n",
+					   j, finfo[i].argtypes[j]);
 			resetPQExpBuffer(q);
 			resetPQExpBuffer(fn);
 			resetPQExpBuffer(delqry);
@@ -3448,11 +3427,11 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
 
 	if (rettypename == NULL)
 	{
-		fprintf(stderr, "Notice: function \"%s\" is not dumped.\n",
-				finfo[i].proname);
+		write_msg(NULL, "Notice: function \"%s\" not dumped\n",
+				   finfo[i].proname);
 
-		fprintf(stderr, "Reason: return type name (oid %s) not found.\n",
-				finfo[i].prorettype);
+		write_msg(NULL, "Reason: name of return data type (oid %s) not found\n",
+				   finfo[i].prorettype);
 		resetPQExpBuffer(q);
 		resetPQExpBuffer(fn);
 		resetPQExpBuffer(delqry);
@@ -3988,7 +3967,7 @@ _dumpTableAttr70(Archive *fout, TableInfo *tblinfo, int i, int j, PQExpBuffer q)
 
 void
 dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
-		   IndInfo *indinfo, int numIndices,
+		   IndInfo *indinfo, int numIndexes,
 		   InhInfo *inhinfo, int numInherits,
 		   TypeInfo *tinfo, int numTypes, const char *tablename,
 		   const bool aclsSkip, const bool oids,
@@ -4113,16 +4092,16 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
 					PQExpBuffer consDef;
 
 					/* Find the corresponding index */
-					for (k = 0; k < numIndices; k++)
+					for (k = 0; k < numIndexes; k++)
 					{
 						if (strcmp(indinfo[k].oid, tblinfo[i].pkIndexOid) == 0)
 							break;
 					}
 
-					if (k >= numIndices)
+					if (k >= numIndexes)
 					{
-						fprintf(stderr, "dumpTables(): failed sanity check, could not find index (%s) for PK constraint\n",
-								tblinfo[i].pkIndexOid);
+						write_msg(NULL, "dumpTables(): failed sanity check, could not find index (%s) for primary key constraint\n",
+								   tblinfo[i].pkIndexOid);
 						exit_nicely(g_conn);
 					}
 
@@ -4245,18 +4224,18 @@ getAttrName(int attrnum, TableInfo *tblInfo)
 		case TableOidAttributeNumber:
 			return "tableoid";
 	}
-	fprintf(stderr, "getAttrName(): Invalid attribute number %d for table %s\n",
-			attrnum, tblInfo->relname);
+	write_msg(NULL, "getAttrName(): invalid column number %d for table %s\n",
+			   attrnum, tblInfo->relname);
 	exit_nicely(g_conn);
 	return NULL;				/* keep compiler quiet */
 }
 
 /*
- * dumpIndices:
- *	  write out to fout all the user-define indices
+ * dumpIndexes:
+ *	  write out to fout all the user-define indexes
  */
 void
-dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
+dumpIndexes(Archive *fout, IndInfo *indinfo, int numIndexes,
 			TableInfo *tblinfo, int numTables, const char *tablename)
 {
 	int			i,
@@ -4275,14 +4254,14 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 				id2 = createPQExpBuffer();
 	PGresult   *res;
 
-	for (i = 0; i < numIndices; i++)
+	for (i = 0; i < numIndexes; i++)
 	{
 		tableInd = findTableByName(tblinfo, numTables,
 								   indinfo[i].indrelname);
 		if (tableInd < 0)
 		{
-			fprintf(stderr, "dumpIndices(): failed sanity check, table %s was not found\n",
-					indinfo[i].indrelname);
+			write_msg(NULL, "dumpIndexes(): failed sanity check, table %s was not found\n",
+					   indinfo[i].indrelname);
 			exit(1);
 		}
 
@@ -4335,8 +4314,8 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 			res = PQexec(g_conn, q->data);
 			if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (funcname) failed.  "
-						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				write_msg(NULL, "query to get function name of oid %s failed: %s",
+						  indinfo[i].indproc, PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
@@ -4344,8 +4323,8 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 			numFuncs = PQntuples(res);
 			if (numFuncs != 1)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (funcname) for index %s returned %d tuples. Expected 1.\n",
-						indinfo[i].indrelname, numFuncs);
+				write_msg(NULL, "query to get function name of oid %s returned %d rows; expected 1\n",
+						  indinfo[i].indproc, numFuncs);
 				exit_nicely(g_conn);
 			}
 
@@ -4369,8 +4348,8 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 			res = PQexec(g_conn, q->data);
 			if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (classname) failed.  "
-						"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+				write_msg(NULL, "query to get operator class name of oid %u failed: %s",
+						  indclass, PQerrorMessage(g_conn));
 				exit_nicely(g_conn);
 			}
 
@@ -4378,8 +4357,8 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 			numRows = PQntuples(res);
 			if (numRows != 1)
 			{
-				fprintf(stderr, "dumpIndices(): SELECT (classname) for index %s returned %d tuples. Expected 1.\n",
-						indinfo[i].indrelname, numRows);
+				write_msg(NULL, "query to get operator class name of oid %u returned %d rows; expected 1\n",
+						  indclass, numRows);
 				exit_nicely(g_conn);
 			}
 
@@ -4389,8 +4368,8 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 
 		if (funcname && nclass != 1)
 		{
-			fprintf(stderr, "dumpIndices(): Must be exactly one OpClass "
-					"for functional index %s\n", indinfo[i].indexrelname);
+			write_msg(NULL, "There must be exactly one OpClass for functional index \"%s\".\n",
+					  indinfo[i].indexrelname);
 			exit_nicely(g_conn);
 		}
 
@@ -4413,8 +4392,7 @@ dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
 			{
 				if (k >= nclass)
 				{
-					fprintf(stderr, "dumpIndices(): OpClass not found for "
-							"attribute '%s' of index '%s'\n",
+					write_msg(NULL, "no operator class found for column \"%s\" of index \"%s\"\n",
 							attname, indinfo[i].indexrelname);
 					exit_nicely(g_conn);
 				}
@@ -4551,14 +4529,12 @@ setMaxOid(Archive *fout)
 	PGresult   *res;
 	Oid			max_oid;
 	char		sql[1024];
-	int			pos;
 
 	res = PQexec(g_conn, "CREATE TEMPORARY TABLE pgdump_oid (dummy int4)");
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not create pgdump_oid table.  "
-			"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "could not create pgdump_oid table: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
@@ -4566,14 +4542,13 @@ setMaxOid(Archive *fout)
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not insert into pgdump_oid table.  "
-			"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "could not insert into pgdump_oid table: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	max_oid = atol(PQoidStatus(res));
 	if (max_oid == 0)
 	{
-		fprintf(stderr, "Invalid max id in setMaxOid\n");
+		write_msg(NULL, "inserted invalid oid\n");
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
@@ -4581,19 +4556,20 @@ setMaxOid(Archive *fout)
 	if (!res ||
 		PQresultStatus(res) != PGRES_COMMAND_OK)
 	{
-		fprintf(stderr, "Can not drop pgdump_oid table.  "
-			"Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "could not drop pgdump_oid table: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	PQclear(res);
 	if (g_verbose)
 		fprintf(stderr, "%s maximum system oid is %u %s\n",
 				g_comment_start, max_oid, g_comment_end);
-	pos = snprintf(sql, 1024, "CREATE TEMPORARY TABLE pgdump_oid (dummy int4);\n");
-	pos = pos + snprintf(sql + pos, 1024 - pos, "COPY pgdump_oid WITH OIDS FROM stdin;\n");
-	pos = pos + snprintf(sql + pos, 1024 - pos, "%-d\t0\n", max_oid);
-	pos = pos + snprintf(sql + pos, 1024 - pos, "\\.\n");
-	pos = pos + snprintf(sql + pos, 1024 - pos, "DROP TABLE pgdump_oid;\n");
+	snprintf(sql, 1024,
+			 "CREATE TEMPORARY TABLE pgdump_oid (dummy int4);\n"
+			 "COPY pgdump_oid WITH OIDS FROM stdin;\n"
+			 "%-d\t0\n"
+			 "\\.\n"
+			 "DROP TABLE pgdump_oid;\n",
+			 max_oid);
 
 	ArchiveEntry(fout, "0", "Max OID", "<Init>", NULL, sql, "", "", "", NULL, NULL);
 }
@@ -4620,21 +4596,18 @@ findLastBuiltinOid_V71(const char *dbname)
 	if (res == NULL ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "pg_dump: error in finding the last system OID. ");
-		fprintf(stderr, "Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "error in finding the last system oid: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	ntups = PQntuples(res);
 	if (ntups < 1)
 	{
-		fprintf(stderr, "pg_dump: couldn't find the pg_database entry.\n");
-		fprintf(stderr, "There is no entry in the 'pg_database' table for this database.\n");
+		write_msg(NULL, "missing pg_database entry for this database\n");
 		exit_nicely(g_conn);
 	}
 	if (ntups > 1)
 	{
-		fprintf(stderr, "pg_dump: found more than one matching database.\n");
-		fprintf(stderr, "There is more than one entry for this database in the 'pg_database' table\n");
+		write_msg(NULL, "found more than one pg_database entry for this database\n");
 		exit_nicely(g_conn);
 	}
 	last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "datlastsysoid")));
@@ -4661,21 +4634,18 @@ findLastBuiltinOid_V70(void)
 	if (res == NULL ||
 		PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "pg_dump error in finding the template1 database.");
-		fprintf(stderr, "Explanation from backend: '%s'.\n", PQerrorMessage(g_conn));
+		write_msg(NULL, "error in finding the template1 database: %s", PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 	ntups = PQntuples(res);
 	if (ntups < 1)
 	{
-		fprintf(stderr, "pg_dump: couldn't find the template1 database.\n");
-		fprintf(stderr, "There is no 'template1' entry in the 'pg_database' table.\n");
+		write_msg(NULL, "could not find template1 database entry in the pg_database table\n");
 		exit_nicely(g_conn);
 	}
 	if (ntups > 1)
 	{
-		fprintf(stderr, "pg_dump: found more than one template1 database.\n");
-		fprintf(stderr, "There is more than one 'template1' entry in the 'pg_database' table\n");
+		write_msg(NULL, "found more than one template1 database entry in the pg_database table\n");
 		exit_nicely(g_conn);
 	}
 	last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "oid")));
@@ -4706,23 +4676,21 @@ dumpSequence(Archive *fout, TableInfo tbinfo, const bool schemaOnly, const bool
 	res = PQexec(g_conn, query->data);
 	if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
 	{
-		fprintf(stderr, "dumpSequence(%s): SELECT failed.  "
-				"Explanation from backend: '%s'.\n", tbinfo.relname, PQerrorMessage(g_conn));
+		write_msg(NULL, "query to get data of sequence \"%s\" failed: %s", tbinfo.relname, PQerrorMessage(g_conn));
 		exit_nicely(g_conn);
 	}
 
 	if (PQntuples(res) != 1)
 	{
-		fprintf(stderr, "dumpSequence(%s): %d (!= 1) tuples returned by SELECT\n",
-				tbinfo.relname, PQntuples(res));
+		write_msg(NULL, "query to get data of sequence \"%s\" returned %d rows (expected 1)\n",
+				   tbinfo.relname, PQntuples(res));
 		exit_nicely(g_conn);
 	}
 
 	if (strcmp(PQgetvalue(res, 0, 0), tbinfo.relname) != 0)
 	{
-		fprintf(stderr, "dumpSequence(%s): different sequence name "
-				"returned by SELECT: %s\n",
-				tbinfo.relname, PQgetvalue(res, 0, 0));
+		write_msg(NULL, "query to get data of sequence \"%s\" returned name \"%s\"\n",
+				   tbinfo.relname, PQgetvalue(res, 0, 0));
 		exit_nicely(g_conn);
 	}
 
@@ -4864,8 +4832,8 @@ dumpRules(Archive *fout, const char *tablename,
 		if (!res ||
 			PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "dumpRules(): SELECT failed for rules associated with table \"%s\".\n\tExplanation from backend: '%s'.\n",
-					tblinfo[t].relname, PQerrorMessage(g_conn));
+			write_msg(NULL, "query to get rules associated with table \"%s\" failed: %s",
+					   tblinfo[t].relname, PQerrorMessage(g_conn));
 			exit_nicely(g_conn);
 		}
 
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 8e5db6015cb5d465ce13828b91e7635663cf54b2..749408338508d43e83e1410a3e4e78216295902e 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_dump.h,v 1.63 2001/04/25 07:03:20 pjw Exp $
+ * $Id: pg_dump.h,v 1.64 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
  *
@@ -254,7 +254,7 @@ extern OprInfo *getOperators(int *numOperators);
 extern TableInfo *getTables(int *numTables, FuncInfo *finfo, int numFuncs);
 extern InhInfo *getInherits(int *numInherits);
 extern void getTableAttrs(TableInfo *tbinfo, int numTables);
-extern IndInfo *getIndices(int *numIndices);
+extern IndInfo *getIndexes(int *numIndexes);
 extern void dumpDBComment(Archive *outfile);
 extern void dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
 		  TypeInfo *tinfo, int numTypes);
@@ -267,12 +267,12 @@ extern void dumpAggs(Archive *fout, AggInfo *agginfo, int numAggregates,
 extern void dumpOprs(Archive *fout, OprInfo *agginfo, int numOperators,
 		 TypeInfo *tinfo, int numTypes);
 extern void dumpTables(Archive *fout, TableInfo *tbinfo, int numTables,
-		   IndInfo *indinfo, int numIndices,
+		   IndInfo *indinfo, int numIndexes,
 		   InhInfo *inhinfo, int numInherits,
 		   TypeInfo *tinfo, int numTypes, const char *tablename,
 		   const bool acls, const bool oids,
 		   const bool schemaOnly, const bool dataOnly);
-extern void dumpIndices(Archive *fout, IndInfo *indinfo, int numIndices,
+extern void dumpIndexes(Archive *fout, IndInfo *indinfo, int numIndexes,
 			TableInfo *tbinfo, int numTables, const char *tablename);
 extern const char *fmtId(const char *identifier, bool force_quotes);
 
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 7e6ee4f8dd6128b5e753872e5c9c1fbc401efd6d..a058f069f2a3055ff6bf1785377380d3fe638657 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -11,7 +11,7 @@
  *		  user-defined types
  *		  user-defined functions
  *		  tables
- *		  indices
+ *		  indexes
  *		  aggregates
  *		  operators
  *		  ACL - grant/revoke
@@ -34,7 +34,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.20 2001/05/17 21:12:49 petere Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v 1.21 2001/06/27 21:21:37 petere Exp $
  *
  * Modifications - 28-Jun-2000 - pjw@rhyme.com.au
  *
@@ -55,10 +55,8 @@
  */
 
 #include "pg_backup.h"
+#include "pg_backup_archiver.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
 #include <ctype.h>
 
 #ifndef HAVE_STRDUP
@@ -73,6 +71,10 @@
 #include <getopt.h>
 #endif
 
+#ifdef ENABLE_NLS
+#include <locale.h>
+#endif
+
 /* Forward decls */
 static void usage(const char *progname);
 static char *_cleanupName(char *name);
@@ -116,16 +118,24 @@ int
 main(int argc, char **argv)
 {
 	RestoreOptions *opts;
-	char	   *progname;
 	int			c;
 	Archive    *AH;
 	char	   *fileSpec = NULL;
 	extern int	optind;
 	extern char *optarg;
 
+#ifdef ENABLE_NLS
+	setlocale(LC_ALL, "");
+	bindtextdomain("pg_dump", LOCALEDIR);
+	textdomain("pg_dump");
+#endif
+
 	opts = NewRestoreOptions();
 
-	progname = argv[0];
+	if (!strrchr(argv[0], '/'))
+		progname = argv[0];
+	else
+		progname = strrchr(argv[0], '/') + 1;
 
 	if (argc > 1)
 	{
@@ -257,7 +267,7 @@ main(int argc, char **argv)
 				opts->aclsSkip = 1;
 				break;
 			default:
-				fprintf(stderr, "Try '%s --help' for more information.\n", progname);
+				fprintf(stderr, gettext("Try '%s --help' for more information.\n"), progname);
 				exit(1);
 		}
 	}
@@ -289,8 +299,8 @@ main(int argc, char **argv)
 				break;
 
 			default:
-				fprintf(stderr, "%s: Unknown archive format '%s', please specify 't' or 'c'\n",
-						progname, opts->formatName);
+				write_msg("unrecognized archive format '%s'; please specify 't' or 'c'\n",
+						  opts->formatName);
 				exit(1);
 		}
 	}
@@ -335,75 +345,78 @@ main(int argc, char **argv)
 static void
 usage(const char *progname)
 {
-	printf("%s restores a PostgreSQL database from an archive created by pg_dump.\n\n"
-		   "Usage:\n  %s [options] [file]\n\n"
-		   "Options:\n",
+	printf(gettext(
+		"%s restores a PostgreSQL database from an archive created by pg_dump.\n\n"
+		"Usage:\n  %s [options] [file]\n\n"
+		"Options:\n"),
 		   progname, progname);
 #ifdef HAVE_GETOPT_LONG
-	puts(
-		 "  -a, --data-only          restore only the data, no schema\n"
-	   "  -c, --clean              clean (drop) schema prior to create\n"
-	"  -C, --create             output commands to create the database\n"
-		 "  -d, --dbname=NAME        specify database name\n"
-		 "  -f, --file=FILENAME      script output file name\n"
-		 "  -F, --format {c|f}       specify backup file format\n"
-		 "  -h, --host HOSTNAME      server host name\n"
-		 "  -i, --index[=NAME]       restore indices or named index\n"
-		 "  -l, --list               dump summarized TOC for this file\n"
-		 "  -L, --use-list=FILENAME  use specified table of contents for ordering\n"
-		 "                           output from this file\n"
-		 "  -N, --orig-order         restore in original dump order\n"
-		 "  -o, --oid-order          restore in oid order\n"
-	 "  -O, --no-owner           do not reconnect to database to match\n"
-		 "                           object owner\n"
-		 "  -p, --port PORT          server port number\n"
-	   "  -P, --function[=NAME]    restore functions or named function\n"
-		 "  -r, --rearrange          rearrange output to put indexes etc. at end\n"
-		 "  -R, --no-reconnect       disallow ALL reconnections to the database\n"
-		 "  -s, --schema-only        restore only the schema, no data\n"
-		 "  -S, --superuser=NAME     specify the superuser user name to use for\n"
-		 "                           disabling triggers\n"
-		 "  -t, --table[=TABLE]      restore this table only\n"
-		 "  -T, --trigger[=NAME]     restore triggers or named trigger\n"
-		 "  -U, --username=NAME      connect as specified database user\n"
-		 "  -v, --verbose            verbose\n"
-		 "  -W, --password           force password prompt (should happen automatically)\n"
-	 "  -x, --no-acl             skip dumping of ACLs (grant/revoke)\n");
-
-#else							/* not HAVE_GETOPT_LONG */
-
-	puts(
-		 "  -a                       restore only the data, no schema\n"
-	   "  -c                       clean (drop) schema prior to create\n"
-	"  -C                       output commands to create the database\n"
-		 "  -d NAME                  specify database name\n"
-		 "  -f FILENAME              script output file name\n"
-		 "  -F {c|f}                 specify backup file format\n"
-		 "  -h HOSTNAME              server host name\n"
-		 "  -i NAME                  restore indices or named index\n"
-		 "  -l                       dump summarized TOC for this file\n"
-		 "  -L FILENAME              use specified table of contents for ordering\n"
-		 "                           output from this file\n"
-		 "  -N                       restore in original dump order\n"
-		 "  -o                       restore in oid order\n"
-		 "  -O                       do not output reconnect to database to match\n"
-		 "                           object owner\n"
-		 "  -p PORT                  server port number\n"
-	   "  -P NAME                  restore functions or named function\n"
-		 "  -r                       rearrange output to put indexes etc at end\n"
-		 "  -R                       disallow ALL reconnections to the database\n"
-		 "  -s                       restore only the schema, no data\n"
-		 "  -S NAME                  specify the superuser user name to use for\n"
-		 "                           disabling triggers\n"
-		 "  -t NAME                  restore this table only\n"
-		 "  -T NAME                  restore triggers or named trigger\n"
-		 "  -U NAME                  connect as specified database user\n"
-		 "  -v                       verbose\n"
-		 "  -W                       force password prompt (should happen automatically)\n"
-	 "  -x                       skip dumping of ACLs (grant/revoke)\n");
+	puts(gettext(
+		"  -a, --data-only          restore only the data, no schema\n"
+		"  -c, --clean              clean (drop) schema prior to create\n"
+		"  -C, --create             output commands to create the database\n"
+		"  -d, --dbname=NAME        specify database name\n"
+		"  -f, --file=FILENAME      script output file name\n"
+		"  -F, --format {c|f}       specify backup file format\n"
+		"  -h, --host HOSTNAME      server host name\n"
+		"  -i, --index[=NAME]       restore indexes or named index\n"
+		"  -l, --list               dump summarized TOC for this file\n"
+		"  -L, --use-list=FILENAME  use specified table of contents for ordering\n"
+		"                           output from this file\n"
+		"  -N, --orig-order         restore in original dump order\n"
+		"  -o, --oid-order          restore in oid order\n"
+		"  -O, --no-owner           do not reconnect to database to match\n"
+		"                           object owner\n"
+		"  -p, --port PORT          server port number\n"
+		"  -P, --function[=NAME]    restore functions or named function\n"
+		"  -r, --rearrange          rearrange output to put indexes etc. at end\n"
+		"  -R, --no-reconnect       disallow ALL reconnections to the database\n"
+		"  -s, --schema-only        restore only the schema, no data\n"
+		"  -S, --superuser=NAME     specify the superuser user name to use for\n"
+		"                           disabling triggers\n"
+		"  -t, --table[=TABLE]      restore this table only\n"
+		"  -T, --trigger[=NAME]     restore triggers or named trigger\n"
+		"  -U, --username=NAME      connect as specified database user\n"
+		"  -v, --verbose            verbose\n"
+		"  -W, --password           force password prompt (should happen automatically)\n"
+		"  -x, --no-acl             skip dumping of ACLs (grant/revoke)\n"
+		));
+
+#else /* not HAVE_GETOPT_LONG */
+
+	puts(gettext(
+		"  -a                       restore only the data, no schema\n"
+		"  -c                       clean (drop) schema prior to create\n"
+		"  -C                       output commands to create the database\n"
+		"  -d NAME                  specify database name\n"
+		"  -f FILENAME              script output file name\n"
+		"  -F {c|f}                 specify backup file format\n"
+		"  -h HOSTNAME              server host name\n"
+		"  -i NAME                  restore indexes or named index\n"
+		"  -l                       dump summarized TOC for this file\n"
+		"  -L FILENAME              use specified table of contents for ordering\n"
+		"                           output from this file\n"
+		"  -N                       restore in original dump order\n"
+		"  -o                       restore in oid order\n"
+		"  -O                       do not output reconnect to database to match\n"
+		"                           object owner\n"
+		"  -p PORT                  server port number\n"
+		"  -P NAME                  restore functions or named function\n"
+		"  -r                       rearrange output to put indexes etc at end\n"
+		"  -R                       disallow ALL reconnections to the database\n"
+		"  -s                       restore only the schema, no data\n"
+		"  -S NAME                  specify the superuser user name to use for\n"
+		"                           disabling triggers\n"
+		"  -t NAME                  restore this table only\n"
+		"  -T NAME                  restore triggers or named trigger\n"
+		"  -U NAME                  connect as specified database user\n"
+		"  -v                       verbose\n"
+		"  -W                       force password prompt (should happen automatically)\n"
+		"  -x                       skip dumping of ACLs (grant/revoke)\n"
+		));
 #endif
-	puts("If [file] is not supplied, then standard input is used.\n");
-	puts("Report bugs to <pgsql-bugs@postgresql.org>.");
+	puts(gettext("If no input file name is supplied, then standard input is used.\n"));
+	puts(gettext("Report bugs to <pgsql-bugs@postgresql.org>."));
 }