diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 51f68f2bab..6d2309df31 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -1483,12 +1483,16 @@ static int _tocEntryRequired(TocEntry* te, RestoreOptions *ropt) } } + /* Special Case: If 'SEQUENCE SET' and schemaOnly, then not needed */ + if (ropt->schemaOnly && (strcmp(te->desc, "SEQUENCE SET") == 0) ) + return 0; + /* Mask it if we only want schema */ if (ropt->schemaOnly) res = res & 1; /* Mask it we only want data */ - if (ropt->dataOnly) + if (ropt->dataOnly && (strcmp(te->desc, "SEQUENCE SET") != 0) ) res = res & 2; /* Mask it if we don't have a schema contribition */ diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h index d6e3241192..275f9eba2e 100644 --- a/src/bin/pg_dump/pg_backup_archiver.h +++ b/src/bin/pg_dump/pg_backup_archiver.h @@ -62,7 +62,7 @@ typedef z_stream *z_streamp; #define K_VERS_MAJOR 1 #define K_VERS_MINOR 4 -#define K_VERS_REV 16 +#define K_VERS_REV 17 /* Data block types */ #define BLK_DATA 1 diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 24ef289135..83fd0e6de5 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -22,7 +22,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.169 2000/10/10 13:55:28 pjw Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.170 2000/10/13 00:43:31 pjw Exp $ * * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb * @@ -992,6 +992,7 @@ main(int argc, char **argv) MoveToEnd(g_fout, "INDEX"); MoveToEnd(g_fout, "TRIGGER"); MoveToEnd(g_fout, "RULE"); + MoveToEnd(g_fout, "SEQUENCE SET"); if (plainText) { @@ -4015,20 +4016,32 @@ dumpSequence(Archive *fout, TableInfo tbinfo) resetPQExpBuffer(delqry); appendPQExpBuffer(delqry, "DROP SEQUENCE %s;\n", fmtId(tbinfo.relname, force_quotes)); + /* + * The logic we use for restoring sequences is as follows: + * - Add a basic CREATE SEQUENCE statement + * (use last_val for start if called == 'f', else use min_val for start_val). + * - Add a 'SETVAL(seq, last_val, iscalled)' at restore-time iff we load data + */ resetPQExpBuffer(query); appendPQExpBuffer(query, "CREATE SEQUENCE %s start %d increment %d maxvalue %d " "minvalue %d cache %d %s;\n", - fmtId(tbinfo.relname, force_quotes), last, incby, maxv, minv, cache, + fmtId(tbinfo.relname, force_quotes), + (called == 't') ? minv : last, + incby, maxv, minv, cache, (cycled == 't') ? "cycle" : ""); - if (called != 'f') { - appendPQExpBuffer(query, "SELECT nextval ('%s');\n", fmtId(tbinfo.relname, force_quotes)); - } - ArchiveEntry(fout, tbinfo.oid, fmtId(tbinfo.relname, force_quotes), "SEQUENCE", NULL, query->data, delqry->data, "", tbinfo.usename, NULL, NULL); + + resetPQExpBuffer(query); + appendPQExpBuffer(query, "SELECT setval ('%s', %d, '%c');\n", + fmtId(tbinfo.relname, force_quotes), last, called); + + ArchiveEntry(fout, tbinfo.oid, fmtId(tbinfo.relname, force_quotes), "SEQUENCE SET", NULL, + query->data, "" /* Del */, "", "", NULL, NULL); + /* Dump Sequence Comments */ resetPQExpBuffer(query); diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index dd10ff5480..12a10a51b5 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -292,7 +292,7 @@ int main(int argc, char **argv) MoveToEnd(AH, "INDEX"); MoveToEnd(AH, "TRIGGER"); MoveToEnd(AH, "RULE"); - MoveToEnd(AH, "ACL"); + MoveToEnd(AH, "SEQUENCE SET"); } /* Database MUST be at start */