From da85fb4747ac0b7f787ef7a402adea2747e32d8e Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 28 Aug 2013 09:43:34 +0300 Subject: [PATCH] Accept multiple -I, -P, -T and -n options in pg_restore. We already did this for -t (--table) in 9.3, but missed the other similar options. For consistency, allow all of them to be specified multiple times. Unfortunately it's too late to sneak this into 9.3, so commit to master only. --- doc/src/sgml/ref/pg_restore.sgml | 12 ++++++++---- src/bin/pg_dump/pg_backup.h | 8 ++++---- src/bin/pg_dump/pg_backup_archiver.c | 10 +++++----- src/bin/pg_dump/pg_restore.c | 8 ++++---- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index 7c48fcd288..717da4272d 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -230,7 +230,8 @@ - Restore definition of named index only. + Restore definition of named index only. Multiple indexes + may be specified with multiple @@ -314,7 +315,8 @@ - Restore only objects that are in the named schema. This can be + Restore only objects that are in the named schema. Multiple schemas + may be specified with multiple option to restore just a specific table. @@ -348,7 +350,8 @@ Restore the named function only. Be careful to spell the function name and arguments exactly as they appear in the dump file's table - of contents. + of contents. Multiple functions may be specified with multiple + @@ -413,7 +416,8 @@ - Restore named trigger only. + Restore named trigger only. Multiple triggers may be specified with + multiple diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index b456f95969..6927968de0 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -129,10 +129,10 @@ typedef struct _restoreOptions int selFunction; int selTrigger; int selTable; - char *indexNames; - char *functionNames; - char *schemaNames; - char *triggerNames; + SimpleStringList indexNames; + SimpleStringList functionNames; + SimpleStringList schemaNames; + SimpleStringList triggerNames; SimpleStringList tableNames; int useDB; diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 5204ceb964..50619a2815 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -2456,12 +2456,12 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt) } /* Check options for selective dump/restore */ - if (ropt->schemaNames) + if (ropt->schemaNames.head != NULL) { /* If no namespace is specified, it means all. */ if (!te->namespace) return 0; - if (strcmp(ropt->schemaNames, te->namespace) != 0) + if (!(simple_string_list_member(&ropt->schemaNames, te->namespace))) return 0; } @@ -2479,21 +2479,21 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt) { if (!ropt->selIndex) return 0; - if (ropt->indexNames && strcmp(ropt->indexNames, te->tag) != 0) + if (ropt->indexNames.head != NULL && (!(simple_string_list_member(&ropt->indexNames, te->tag)))) return 0; } else if (strcmp(te->desc, "FUNCTION") == 0) { if (!ropt->selFunction) return 0; - if (ropt->functionNames && strcmp(ropt->functionNames, te->tag) != 0) + if (ropt->functionNames.head != NULL && (!(simple_string_list_member(&ropt->functionNames, te->tag)))) return 0; } else if (strcmp(te->desc, "TRIGGER") == 0) { if (!ropt->selTrigger) return 0; - if (ropt->triggerNames && strcmp(ropt->triggerNames, te->tag) != 0) + if (ropt->triggerNames.head != NULL && (!(simple_string_list_member(&ropt->triggerNames, te->tag)))) return 0; } else diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index 985c82621b..26480033a2 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -196,7 +196,7 @@ main(int argc, char **argv) break; case 'n': /* Dump data for this schema only */ - opts->schemaNames = pg_strdup(optarg); + simple_string_list_append(&opts->schemaNames, optarg); break; case 'O': @@ -213,17 +213,17 @@ main(int argc, char **argv) case 'P': /* Function */ opts->selTypes = 1; opts->selFunction = 1; - opts->functionNames = pg_strdup(optarg); + simple_string_list_append(&opts->functionNames, optarg); break; case 'I': /* Index */ opts->selTypes = 1; opts->selIndex = 1; - opts->indexNames = pg_strdup(optarg); + simple_string_list_append(&opts->indexNames, optarg); break; case 'T': /* Trigger */ opts->selTypes = 1; opts->selTrigger = 1; - opts->triggerNames = pg_strdup(optarg); + simple_string_list_append(&opts->triggerNames, optarg); break; case 's': /* dump schema only */ opts->schemaOnly = 1; -- 2.39.5