]> granicus.if.org Git - postgresql/commitdiff
pg_dump: Fix some schema issues when dumping sequences
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 24 Jan 2017 22:03:56 +0000 (17:03 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Tue, 24 Jan 2017 22:19:55 +0000 (17:19 -0500)
In the new code for selecting sequence data from pg_sequence, set the
schema to pg_catalog instead of the sequences own schema, and refer to
the sequence by OID instead of name, which was missing a schema
qualification.

Reported-by: Stephen Frost <sfrost@snowman.net>
src/bin/pg_dump/pg_dump.c

index e3cca62bf7280b53844af99dc87228b60a5f3f9e..a6de9d7bc21602a374272148c133e89eb748c06a 100644 (file)
@@ -15873,14 +15873,14 @@ dumpSequence(Archive *fout, TableInfo *tbinfo)
        PQExpBuffer delqry = createPQExpBuffer();
        PQExpBuffer labelq = createPQExpBuffer();
 
-       /* Make sure we are in proper schema */
-       selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
-
        snprintf(bufm, sizeof(bufm), INT64_FORMAT, PG_INT64_MIN);
        snprintf(bufx, sizeof(bufx), INT64_FORMAT, PG_INT64_MAX);
 
        if (fout->remoteVersion >= 100000)
        {
+               /* Make sure we are in proper schema */
+               selectSourceSchema(fout, "pg_catalog");
+
                appendPQExpBuffer(query,
                                                  "SELECT seqstart, seqincrement, "
                                                  "CASE WHEN seqincrement > 0 AND seqmax = %s THEN NULL "
@@ -15894,12 +15894,20 @@ dumpSequence(Archive *fout, TableInfo *tbinfo)
                                                  "seqcache, seqcycle "
                                                  "FROM pg_class c "
                                                  "JOIN pg_sequence s ON (s.seqrelid = c.oid) "
-                                                 "WHERE relname = ",
-                                                 bufx, bufm);
-               appendStringLiteralAH(query, tbinfo->dobj.name, fout);
+                                                 "WHERE c.oid = '%u'::oid",
+                                                 bufx, bufm,
+                                                 tbinfo->dobj.catId.oid);
        }
        else if (fout->remoteVersion >= 80400)
        {
+               /*
+                * Before PostgreSQL 10, sequence metadata is in the sequence itself,
+                * so switch to the sequence's schema instead of pg_catalog.
+                */
+
+               /* Make sure we are in proper schema */
+               selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
+
                appendPQExpBuffer(query,
                                                  "SELECT start_value, increment_by, "
                                   "CASE WHEN increment_by > 0 AND max_value = %s THEN NULL "
@@ -15916,6 +15924,9 @@ dumpSequence(Archive *fout, TableInfo *tbinfo)
        }
        else
        {
+               /* Make sure we are in proper schema */
+               selectSourceSchema(fout, tbinfo->dobj.namespace->dobj.name);
+
                appendPQExpBuffer(query,
                                                  "SELECT 0 AS start_value, increment_by, "
                                   "CASE WHEN increment_by > 0 AND max_value = %s THEN NULL "