summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2024-05-07 18:22:52 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2024-05-07 18:23:20 -0400
commita3c00ab1545029ee5d8c87d55da976ae1ccf2ba8 (patch)
tree89e17dba5d012e32ed9ebf81f43f0b0703820aff /src
parent4488142a463c623d3567b1452deb6d768cd0ee9b (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 79570271077..6476f7119af 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -1222,10 +1222,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;