On Wed, Mar 31, 2021 at 09:37:44AM +0900, Michael Paquier wrote: > On Tue, Mar 30, 2021 at 12:02:45PM +0900, Michael Paquier wrote: > > Okay. So I have looked at that stuff in details, and after fixing > > all the issues reported upthread in the code, docs and tests I am > > finishing with the attached. The tests have been moved out of > > src/bin/pg_dump/ to src/test/modules/test_pg_dump/, and include both > > positive and negative tests (used the trick with plpgsql for the > > latter to avoid the dump of the extension test_pg_dump or any data > > related to it). > > I have double-checked this stuff this morning, and did not notice any > issues. So, applied.
I noticed the patch's behavior for relations that are members of non-dumped extensions and are also registered using pg_extension_config_dump(). It depends on the schema: - If extschema='public', "pg_dump -e plpgsql" makes no mention of the relations. - If extschema='public', "pg_dump -e plpgsql --schema=public" includes commands to dump the relation data. This surprised me. (The --schema=public argument causes selectDumpableNamespace() to set nsinfo->dobj.dump=DUMP_COMPONENT_ALL instead of DUMP_COMPONENT_ACL.) - If extschema is not any sort of built-in schema, "pg_dump -e plpgsql" includes commands to dump the relation data. This surprised me. I'm attaching a test case patch that demonstrates this. Is this behavior intentional?
commit d210c01 (demo-dumpext-public) Author: Noah Misch <n...@leadboat.com> AuthorDate: Thu Apr 1 17:36:13 2021 -0700 Commit: Noah Misch <n...@leadboat.com> CommitDate: Thu Apr 1 17:36:13 2021 -0700 demo --- src/test/modules/test_pg_dump/t/001_base.pl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/modules/test_pg_dump/t/001_base.pl b/src/test/modules/test_pg_dump/t/001_base.pl index 7c053c4..600015e 100644 --- a/src/test/modules/test_pg_dump/t/001_base.pl +++ b/src/test/modules/test_pg_dump/t/001_base.pl @@ -203,11 +203,23 @@ my %pgdump_runs = ( }, # plgsql in the list blocks the dump of extension test_pg_dump + # TODO --no-sync needn't appear twice without_extension => { dump_cmd => [ 'pg_dump', '--no-sync', "--file=$tempdir/without_extension.sql", '--extension=plpgsql', '--no-sync', 'postgres', ], + }, + + without_extension_explicit_schema => { + dump_cmd => [ + 'pg_dump', + '--no-sync', + "--file=$tempdir/without_extension_explicit_schema.sql", + '--extension=plpgsql', + '--schema=public', + 'postgres', + ], },); ############################################################### @@ -632,6 +644,8 @@ my %tests = ( pg_dumpall_globals => 1, section_data => 1, section_pre_data => 1, + # excludes this schema + without_extension_explicit_schema => 1, }, }, @@ -646,6 +660,8 @@ my %tests = ( pg_dumpall_globals => 1, section_data => 1, section_pre_data => 1, + # excludes this schema + without_extension_explicit_schema => 1, }, },