Re: [HACKERS] pg_dump --comment? - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: [HACKERS] pg_dump --comment? |
Date | |
Msg-id | 200406050457.i554vg312811@candle.pha.pa.us Whole thread Raw |
In response to | Re: [HACKERS] pg_dump --comment? (Tom Lane <tgl@sss.pgh.pa.us>) |
List | pgsql-patches |
Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Tom Lane wrote: > >> What happens in a pg_dump -Fc / pg_restore scenario? > > > So, in non-ascii format, I need to dump a comment record and read it > > back on restore? Yuck. Anyone want to tackle that? > > Yes. Hacking the output routines alone is almost never the right way > to do things in pg_dump. > > My feeling is that if anyone cares to tackle this, it would be > appropriate to add a record type that carries a user-supplied > comment, and then people could do something like > pg_dump --comment "generated on `date`" > if they want to have a timestamp. I don't want a timestamp put > into the file by default, because that creates problems for > comparing dump files. OK, new patch. This puts start/stop times into dumps if you use -v during dumping. It creates a new node type: -- -- PostgreSQL database dump -- SET client_encoding = 'SQL_ASCII'; SET check_function_bodies = false; -- -- Name: DUMP TIMESTAMP; Type: DUMP TIMESTAMP; Schema: -; Owner: -- -- Started on 2004-06-05 00:41:25 EDT ... -- -- Name: DUMP TIMESTAMP; Type: DUMP TIMESTAMP; Schema: -; Owner: -- -- Completed on 2004-06-05 00:44:28 EDT -- -- PostgreSQL database dump complete -- One issue is that the system dumps certain settings into the output file in ascii dumps, but pg_restore sets them on its own during the restore. Because the timestamp can't be done during pg_restore, it has to be a special node. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: doc/src/sgml/ref/pg_dump.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/pg_dump.sgml,v retrieving revision 1.70 diff -c -c -r1.70 pg_dump.sgml *** doc/src/sgml/ref/pg_dump.sgml 31 May 2004 13:37:52 -0000 1.70 --- doc/src/sgml/ref/pg_dump.sgml 5 Jun 2004 04:22:15 -0000 *************** *** 403,409 **** <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. </para> </listitem> </varlistentry> --- 403,410 ---- <para> Specifies verbose mode. This will cause <application>pg_dump</application> to output detailed object ! comments in the dump file, start and stop times, and progress ! messages to standard error. </para> </listitem> </varlistentry> Index: doc/src/sgml/ref/pg_dumpall.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/pg_dumpall.sgml,v retrieving revision 1.43 diff -c -c -r1.43 pg_dumpall.sgml *** doc/src/sgml/ref/pg_dumpall.sgml 29 Nov 2003 19:51:39 -0000 1.43 --- doc/src/sgml/ref/pg_dumpall.sgml 5 Jun 2004 04:22:15 -0000 *************** *** 192,199 **** <listitem> <para> Specifies verbose mode. This will cause ! <application>pg_dumpall</application> to print progress ! messages to standard error. </para> </listitem> </varlistentry> --- 192,200 ---- <listitem> <para> Specifies verbose mode. This will cause ! <application>pg_dumpall</application> to output start and stop ! times in the dump file, and progress messages to standard error. ! It will also enable verbose output in <application>pg_dump</>. </para> </listitem> </varlistentry> Index: src/bin/pg_dump/pg_dump.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/pg_dump/pg_dump.c,v retrieving revision 1.373 diff -c -c -r1.373 pg_dump.c *** src/bin/pg_dump/pg_dump.c 3 Jun 2004 00:07:36 -0000 1.373 --- src/bin/pg_dump/pg_dump.c 5 Jun 2004 04:22:21 -0000 *************** *** 32,37 **** --- 32,38 ---- #ifdef HAVE_TERMIOS_H #include <termios.h> #endif + #include <time.h> #ifndef HAVE_STRDUP #include "strdup.h" *************** *** 163,168 **** --- 164,170 ---- 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,603 **** --- 600,608 ---- * in a safe order. */ + if (g_fout->verbose) + dumpTimestamp(g_fout, "Started on"); + /* First the special encoding entry. */ dumpEncoding(g_fout); *************** *** 615,620 **** --- 620,628 ---- dumpDumpableObject(g_fout, dobjs[i]); } + if (g_fout->verbose) + dumpTimestamp(g_fout, "Completed on"); + /* * And finally we can do the actual output. */ *************** *** 1280,1285 **** --- 1288,1322 ---- destroyPQExpBuffer(dbQry); destroyPQExpBuffer(delQry); destroyPQExpBuffer(creaQry); + } + + + /* + * 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); + } }
pgsql-patches by date: