Make pg_dump exclude unlogged table data on hot standby slaves

Noted by Joe Van Dyk
This commit is contained in:
Magnus Hagander 2013-01-25 09:44:14 +01:00
parent 760f3c043a
commit be926474be
2 changed files with 20 additions and 1 deletions

View File

@ -713,7 +713,8 @@ PostgreSQL documentation
<para> <para>
Do not dump the contents of unlogged tables. This option has no Do not dump the contents of unlogged tables. This option has no
effect on whether or not the table definitions (schema) are dumped; 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> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -605,6 +605,24 @@ main(int argc, char **argv)
if (fout->remoteVersion < 90100) if (fout->remoteVersion < 90100)
no_security_labels = 1; 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. * Start transaction-snapshot mode transaction to dump consistent data.
*/ */