Thread: pg_restore -N loses extension comment

pg_restore -N loses extension comment

From
Justin Pryzby
Date:
pg_dump -Fc |pg_restore -l -N schema:

| 2; 3079 18187 EXTENSION - pg_buffercache 

Without -N schema also shows:

| 2562; 0 0 COMMENT - EXTENSION pg_buffercache 

I mean literal s-c-h-e-m-a, but I suppose anything else will work the
same.

BTW, I noticed that pg_restore -v shows that duplicate dependencies can be
stored.  We see things like this (and worse).

| 4284; 1259 191439414 VIEW public wmg_server_view telsasoft
| ;      depends on: 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612
612612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612 612
612612 23087 612
 

I see that's possible not only for views, but also tables.
That's probaably wasteful of CPU, at least.

-- 
Justin



Re: pg_restore -N loses extension comment

From
Tom Lane
Date:
Justin Pryzby <pryzby@telsasoft.com> writes:
> pg_dump -Fc |pg_restore -l -N schema:
> | 2; 3079 18187 EXTENSION - pg_buffercache 
> Without -N schema also shows:
> | 2562; 0 0 COMMENT - EXTENSION pg_buffercache 

Hmm, but what happens if you actually do the restore?

I think this may be a bug in -l mode: ProcessArchiveRestoreOptions
saves the result of _tocEntryRequired in te->reqs, but PrintTOCSummary
doesn't, and that will bollix its subsequent _tocEntryRequired checks
for "dependent" TOC entries.

            regards, tom lane



Re: pg_restore -N loses extension comment

From
Tom Lane
Date:
I wrote:
> I think this may be a bug in -l mode: ProcessArchiveRestoreOptions
> saves the result of _tocEntryRequired in te->reqs, but PrintTOCSummary
> doesn't, and that will bollix its subsequent _tocEntryRequired checks
> for "dependent" TOC entries.

Yeah ... the attached seems to fix it.

            regards, tom lane

diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index c6c101c118..56e0688154 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -1319,10 +1319,13 @@ PrintTOCSummary(Archive *AHX)
     curSection = SECTION_PRE_DATA;
     for (te = AH->toc->next; te != AH->toc; te = te->next)
     {
+        /* This bit must match ProcessArchiveRestoreOptions' marking logic */
         if (te->section != SECTION_NONE)
             curSection = te->section;
+        te->reqs = _tocEntryRequired(te, curSection, AH);
+        /* Now, should we print it? */
         if (ropt->verbose ||
-            (_tocEntryRequired(te, curSection, AH) & (REQ_SCHEMA | REQ_DATA)) != 0)
+            (te->reqs & (REQ_SCHEMA | REQ_DATA)) != 0)
         {
             char       *sanitized_name;
             char       *sanitized_schema;