Make pg_dump exclude unlogged table data on hot standby slaves
authorMagnus Hagander
Fri, 25 Jan 2013 08:44:14 +0000 (09:44 +0100)
committerMagnus Hagander
Fri, 25 Jan 2013 08:46:54 +0000 (09:46 +0100)
Noted by Joe Van Dyk

doc/src/sgml/ref/pg_dump.sgml
src/bin/pg_dump/pg_dump.c

index 0d26f15c98f2d455d46c89e4bdfb2d0c3ebdd308..a275eae5c6ab7d024936337bb229608ea9eaeecf 100644 (file)
@@ -713,7 +713,8 @@ PostgreSQL documentation
        
         Do not dump the contents of unlogged tables.  This option has no
         effect on whether or not the table definitions (schema) are dumped;
-        it only suppresses dumping the table data.
+        it only suppresses dumping the table data. Data in unlogged tables
+        is always excluded when dumping from a standby server.
        
       
      
index f432579449fe289114745970cedf575f66e1ae08..1fe9d75b15a9858a5310f7181c31a691568de46f 100644 (file)
@@ -603,6 +603,24 @@ main(int argc, char **argv)
    if (fout->remoteVersion < 90100)
        no_security_labels = 1;
 
+   /*
+    * When running against 9.0 or later, check if we are in recovery mode,
+    * which means we are on a hot standby.
+    */
+   if (fout->remoteVersion >= 90000)
+   {
+       PGresult *res = ExecuteSqlQueryForSingleRow(fout, "SELECT pg_catalog.pg_is_in_recovery()");
+       if (strcmp(PQgetvalue(res, 0, 0), "t") == 0)
+       {
+           /*
+            * On hot standby slaves, never try to dump unlogged table data,
+            * since it will just throw an error.
+            */
+           no_unlogged_table_data = true;
+       }
+       PQclear(res);
+   }
+
    /*
     * Start transaction-snapshot mode transaction to dump consistent data.
     */