Fix bug in sequence dumping using new setval function

This commit is contained in:
Philip Warner 2000-10-13 00:43:31 +00:00
parent 8fb04f8f98
commit 1b1dbb861d
4 changed files with 26 additions and 9 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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);

View File

@ -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 */