diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml
index 4973d27be9237abe81149275f8099ff4624e85fd..12c703b79bceab4af26981cf7e1faa7a55e8305a 100644
--- a/doc/src/sgml/ref/pg_dump.sgml
+++ b/doc/src/sgml/ref/pg_dump.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.70 2004/05/31 13:37:52 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.71 2004/06/07 20:35:57 momjian Exp $
 PostgreSQL documentation
 -->
 
@@ -403,7 +403,8 @@ PostgreSQL documentation
        <para>
 	Specifies verbose mode.  This will cause
 	<application>pg_dump</application> to output detailed object
-        comments in the dump file, and progress messages to standard error.
+        comments and start/stop times to the dump file, and progress 
+        messages to standard error.
        </para>
       </listitem>
      </varlistentry>
diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml
index 06ecce39588a34d5e292d0fe37ff0e5303368233..befd73ba66f4fe53a4f19d90f1b7f80d56ea441b 100644
--- a/doc/src/sgml/ref/pg_dumpall.sgml
+++ b/doc/src/sgml/ref/pg_dumpall.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.43 2003/11/29 19:51:39 pgsql Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.44 2004/06/07 20:35:57 momjian Exp $
 PostgreSQL documentation
 -->
 
@@ -192,8 +192,9 @@ PostgreSQL documentation
       <listitem>
        <para>
 	Specifies verbose mode.  This will cause
-	<application>pg_dumpall</application> to print progress
-	messages to standard error.
+	<application>pg_dumpall</application> to output start/stop
+        times to the dump file, and progress messages to standard error.
+        It will also enable verbose output in <application>pg_dump</>.
        </para>
       </listitem>
      </varlistentry>
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index f71abb7da9f863d514f47bf349cdfb31170eee59..292e70a6db8164a14855576e296d22f3f2d37274 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
  *	by PostgreSQL
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.373 2004/06/03 00:07:36 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.374 2004/06/07 20:35:57 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -32,6 +32,7 @@
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
 #endif
+#include <time.h>
 
 #ifndef HAVE_STRDUP
 #include "strdup.h"
@@ -163,6 +164,7 @@ static char *myFormatType(const char *typname, int32 typmod);
 static const char *fmtQualifiedId(const char *schema, const char *id);
 static int	dumpBlobs(Archive *AH, void *arg);
 static void dumpDatabase(Archive *AH);
+static void dumpTimestamp(Archive *AH, char *msg);
 static void dumpEncoding(Archive *AH);
 static const char *getAttrName(int attrnum, TableInfo *tblInfo);
 static const char *fmtCopyColumnList(const TableInfo *ti);
@@ -598,6 +600,9 @@ main(int argc, char **argv)
 	 * in a safe order.
 	 */
 
+	if (g_fout->verbose)
+		dumpTimestamp(g_fout, "Started on");
+
 	/* First the special encoding entry. */
 	dumpEncoding(g_fout);
 
@@ -615,6 +620,9 @@ main(int argc, char **argv)
 		dumpDumpableObject(g_fout, dobjs[i]);
 	}
 
+	if (g_fout->verbose)
+		dumpTimestamp(g_fout, "Completed on");
+
 	/*
 	 * And finally we can do the actual output.
 	 */
@@ -1283,6 +1291,35 @@ dumpDatabase(Archive *AH)
 }
 
 
+/*
+ * dumpTimestamp
+ */
+static void
+dumpTimestamp(Archive *AH, char *msg)
+{
+	char buf[256];
+	time_t now = time(NULL);
+
+	if (strftime(buf, 256, "%Y-%m-%d %H:%M:%S %Z", localtime(&now)) != 0)
+ 	{
+		PQExpBuffer qry = createPQExpBuffer();
+	
+		appendPQExpBuffer(qry, "-- ");
+		appendPQExpBuffer(qry, msg);
+		appendPQExpBuffer(qry, " ");
+		appendPQExpBuffer(qry, buf);
+		appendPQExpBuffer(qry, "\n");
+
+		ArchiveEntry(AH, nilCatalogId, createDumpId(),
+					 "DUMP TIMESTAMP", NULL, "",
+					 false, "DUMP TIMESTAMP", qry->data, "", NULL,
+					 NULL, 0,
+					 NULL, NULL);
+		destroyPQExpBuffer(qry);
+	}
+}
+
+
 /*
  * dumpEncoding: put the correct encoding into the archive
  */
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index e2834fbc260489b81fd9095e0ed3d89cc6f50926..0e441bb890d5d298c10767fc656eb22ccc985927 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.37 2004/06/05 04:27:48 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.38 2004/06/07 20:35:57 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -50,6 +50,7 @@ static void dumpDatabaseConfig(PGconn *conn, const char *dbname);
 static void dumpUserConfig(PGconn *conn, const char *username);
 static void makeAlterConfigCommand(const char *arrayitem, const char *type, const char *name);
 static void dumpDatabases(PGconn *conn);
+static void dumpTimestamp(char *msg);
 
 static int	runPgDump(const char *dbname);
 static PGconn *connectDatabase(const char *dbname, const char *pghost, const char *pgport,
@@ -220,6 +221,9 @@ main(int argc, char *argv[])
 	conn = connectDatabase("template1", pghost, pgport, pguser, force_password);
 
 	printf("--\n-- PostgreSQL database cluster dump\n--\n\n");
+	if (verbose)
+			dumpTimestamp("Started on");
+
 	printf("\\connect \"template1\"\n\n");
 
 	if (!data_only)
@@ -237,6 +241,8 @@ main(int argc, char *argv[])
 
 	PQfinish(conn);
 
+	if (verbose)
+		dumpTimestamp("Completed on");
 	printf("--\n-- PostgreSQL database cluster dump complete\n--\n\n");
 
 	exit(0);
@@ -808,3 +814,17 @@ executeQuery(PGconn *conn, const char *query)
 
 	return res;
 }
+
+
+/*
+ * dumpTimestamp
+ */
+static void
+dumpTimestamp(char *msg)
+{
+	char buf[256];
+	time_t now = time(NULL);
+
+	if (strftime(buf, 256, "%Y-%m-%d %H:%M:%S %Z", localtime(&now)) != 0)
+		printf("-- %s %s\n\n", msg, buf);
+}