postgres.git / summary / log / commit / refs
commit 1cc43979cf44db0b3da77e34493689fe13484fa0
Author: Magnus Hagander <magnus@hagander.net>
Date: Fri Jan 25 08:44:14 2013 +0000
First released in: 9.3.0, 9.1.8, 9.2.3
Make pg_dump exclude unlogged table data on hot standby slaves
Noted by Joe Van Dyk
doc/src/sgml/ref/pg_dump.sgml | 3 ++-
src/bin/pg_dump/pg_dump.c | 18 ++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml
index f6f33de7e7e..f5733b10c32 100644
--- a/doc/src/sgml/ref/pg_dump.sgml
+++ b/doc/src/sgml/ref/pg_dump.sgml
@@ -678,7 +678,8 @@ PostgreSQL documentation
<para>
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.
</para>
</listitem>
</varlistentry>
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index d6e4220ad5a..bef2b430fe7 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -652,6 +652,24 @@ main(int argc, char **argv)
if (g_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.
*/
[parent: 49e0ea5991bf]