1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-26 12:21:12 +03:00

Do not require 'public' to exist for pg_dump -c

Commit 330b84d8c4 didn't contemplate the case where the public schema
has been dropped and introduced a query which fails when there is no
public schema into pg_dump (when used with -c).

Adjust the query used by pg_dump to handle the case where the public
schema doesn't exist and add tests to check that such a case no longer
fails.

Back-patch the specific fix to 9.6, as the prior commit was.

Adding tests for this case involved adding support to the pg_dump
TAP tests to work with multiple databases, which, while not a large
change, is a bit much to back-patch, so that's only done in master.

Addresses bug #14650
Discussion: https://www.postgresql.org/message-id/20170512181801.1795.47483%40wrigleys.postgresql.org
This commit is contained in:
Stephen Frost
2017-06-28 10:34:01 -04:00
parent 55968ed894
commit a2de017b30

View File

@ -3659,9 +3659,14 @@ getNamespaces(Archive *fout, int *numNamespaces)
* essentially a no-op because the new public schema won't have an * essentially a no-op because the new public schema won't have an
* entry in pg_init_privs anyway, as the entry will be removed when * entry in pg_init_privs anyway, as the entry will be removed when
* the public schema is dropped. * the public schema is dropped.
*
* Further, we have to handle the case where the public schema does
* not exist at all.
*/ */
if (dopt->outputClean) if (dopt->outputClean)
appendPQExpBuffer(query," AND pip.objoid <> 'public'::regnamespace"); appendPQExpBuffer(query," AND pip.objoid <> "
"coalesce((select oid from pg_namespace "
"where nspname = 'public'),0)");
appendPQExpBuffer(query,") "); appendPQExpBuffer(query,") ");