postgres.git / summary / log / commit / refs

commit    52b23b4e1c6f703a6617c027a5def99772af4ce4
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Tue May 07 22:22:52 2024 +0000

    Ensure that "pg_restore -l" reports dependent TOC entries correctly.
    
    If -l was specified together with selective-restore options such as -n
    or -N, dependent TOC entries such as comments would be omitted from
    the listing, even when an actual restore would have selected them.
    This happened because PrintTOCSummary neglected to update the te->reqs
    marking of the entry they depended on.
    
    Per report from Justin Pryzby.  This has been wrong since 0d4e6ed30
    taught _tocEntryRequired to sometimes look at the "reqs" marking of
    other TOC entries, so back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/ZjoeirG7yxODdC4P@pryzbyj2023


src/bin/pg_dump/pg_backup_archiver.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 93930c6197d..bef37dd2b70 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -1219,10 +1219,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; [parent: 90d39929a890]