diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index bd14d38740..d8330ec32a 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -362,6 +362,7 @@ main(int argc, char **argv) {"serializable-deferrable", no_argument, &dopt.serializable_deferrable, 1}, {"snapshot", required_argument, NULL, 6}, {"strict-names", no_argument, &strict_names, 1}, + {"table-names-from-file", required_argument, NULL, 8}, {"use-set-session-authorization", no_argument, &dopt.use_setsessauth, 1}, {"no-publications", no_argument, &dopt.no_publications, 1}, {"no-security-labels", no_argument, &dopt.no_security_labels, 1}, @@ -553,6 +554,59 @@ main(int argc, char **argv) dosync = false; break; + case 8: /* read table names from file */ + { + FILE *f; + char *line; + size_t line_size = 1024; + ssize_t chars; + bool use_stdin = false; + + if (strcmp(optarg, "-") != 0) + { + f = fopen(optarg, "r"); + if (!f) + { + fprintf(stderr, _("%s: could not open the input file \"%s\": %s\n"), + progname, optarg, strerror(errno)); + exit_nicely(1); + } + } + else + { + f = stdin; + use_stdin = true; + } + + line = malloc(line_size); + + while ((chars = getline(&line, &line_size, f)) != -1) + { + if (line[chars - 1] == '\n') + line[chars - 1] = '\0'; + + /* ignore empty rows */ + if (*line != '\0') + { + simple_string_list_append(&table_include_patterns, line); + dopt.include_everything = false; + } + } + + if (ferror(f)) + { + fprintf(stderr, _("%s: could not read from file \"%s\": %s\n"), + progname, use_stdin ? "stdin" : optarg, strerror(errno)); + exit_nicely(1); + } + + if (!use_stdin) + fclose(f); + + free(line); + } + break; + default: fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit_nicely(1); @@ -977,6 +1031,8 @@ help(const char *progname) printf(_(" --snapshot=SNAPSHOT use given snapshot for the dump\n")); printf(_(" --strict-names require table and/or schema include patterns to\n" " match at least one entity each\n")); + printf(_(" --table-names-from-file=FILENAME\n" + " read table's names from file (one table name per line)\n")); printf(_(" --use-set-session-authorization\n" " use SET SESSION AUTHORIZATION commands instead of\n" " ALTER OWNER commands to set ownership\n"));