]> granicus.if.org Git - postgresql/commitdiff
Fix bug in sequence dumping using new setval function
authorPhilip Warner <pjw@rhyme.com.au>
Fri, 13 Oct 2000 00:43:31 +0000 (00:43 +0000)
committerPhilip Warner <pjw@rhyme.com.au>
Fri, 13 Oct 2000 00:43:31 +0000 (00:43 +0000)
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_backup_archiver.h
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_restore.c

index 51f68f2bab0af6a129fc97661eec038d304a7d3f..6d2309df3130ee33ee59fba87cf22eb664b26019 100644 (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 */
index d6e32411929aa6665055a0e526b6317d318456f2..275f9eba2e99fff423932081633e2fbb17c02c43 100644 (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
index 24ef289135feba74990d0611fefd6acec537ef89..83fd0e6de599be19317d988d2363495196533948 100644 (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);
index dd10ff54808d4bc241d6a4397a215c9c06495f26..12a10a51b58c77d24550db6f07e4b386db501842 100644 (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 */