From be926474be57ae73ae2052b968fd785a0096514e Mon Sep 17 00:00:00 2001 From: Magnus Hagander <magnus@hagander.net> Date: Fri, 25 Jan 2013 09:44:14 +0100 Subject: [PATCH] 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 d936cf185df..152edcbe6ed 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -713,7 +713,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 6295b5bf2cc..9f1ef32b158 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -605,6 +605,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. */ -- GitLab