Thread: pg_restore -N loses extension comment
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
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
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;