Fix placement of "SET row_security" command issuance in pg_dump.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 18 Feb 2015 17:23:40 +0000 (12:23 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 18 Feb 2015 17:23:40 +0000 (12:23 -0500)
Somebody apparently threw darts at the code to decide where to insert
these.  They certainly didn't proceed by adding them where other similar
SETs were handled.  This at least broke pg_restore, and perhaps other
use-cases too.

src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_dump.c

index f461393dc25790fe509e9423c066e93173861a31..ca427de7ae931ee5b052aa8efe6422f9c96c82af 100644 (file)
@@ -434,17 +434,6 @@ RestoreArchive(Archive *AHX)
                        ahprintf(AH, "BEGIN;\n\n");
        }
 
-       /*
-        * Enable row-security if necessary.
-        */
-       if (PQserverVersion(AH->connection) >= 90500)
-       {
-               if (!ropt->enable_row_security)
-                       ahprintf(AH, "SET row_security = off;\n");
-               else
-                       ahprintf(AH, "SET row_security = on;\n");
-       }
-
        /*
         * Establish important parameter values right away.
         */
@@ -2804,6 +2793,12 @@ _doSetFixedOutputState(ArchiveHandle *AH)
        if (!AH->public.std_strings)
                ahprintf(AH, "SET escape_string_warning = off;\n");
 
+       /* Adjust row-security state */
+       if (AH->ropt && AH->ropt->enable_row_security)
+               ahprintf(AH, "SET row_security = on;\n");
+       else
+               ahprintf(AH, "SET row_security = off;\n");
+
        ahprintf(AH, "\n");
 }
 
index 7e92b74916afd55764d893ccf14e531012a228a8..2b53c7218fee61d365f9a92c79a8788f1ae29166 100644 (file)
@@ -1005,6 +1005,17 @@ setup_connection(Archive *AH, DumpOptions *dopt, const char *dumpencoding,
        if (quote_all_identifiers && AH->remoteVersion >= 90100)
                ExecuteSqlStatement(AH, "SET quote_all_identifiers = true");
 
+       /*
+        * Adjust row-security mode, if supported.
+        */
+       if (AH->remoteVersion >= 90500)
+       {
+               if (dopt->enable_row_security)
+                       ExecuteSqlStatement(AH, "SET row_security = on");
+               else
+                       ExecuteSqlStatement(AH, "SET row_security = off");
+       }
+
        /*
         * Start transaction-snapshot mode transaction to dump consistent data.
         */
@@ -1058,14 +1069,6 @@ setup_connection(Archive *AH, DumpOptions *dopt, const char *dumpencoding,
                         AH->remoteVersion >= 90200 &&
                         !dopt->no_synchronized_snapshots)
                AH->sync_snapshot_id = get_synchronized_snapshot(AH);
-
-       if (AH->remoteVersion >= 90500)
-       {
-               if (dopt->enable_row_security)
-                       ExecuteSqlStatement(AH, "SET row_security TO ON");
-               else
-                       ExecuteSqlStatement(AH, "SET row_security TO OFF");
-       }
 }
 
 static void