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,
                },
        },
 

Reply via email to