On 12/13/2012 11:02:56 PM, Josh Kupershmidt wrote:
> On Thu, Dec 13, 2012 at 9:03 PM, Karl O. Pinc <k...@meme.com> wrote:

> > Sorry to be so persnickety, and unhelpful until now.
> > It seemed like it should be doable, but something
> > was going wrong between keyboard and chair.  I guess
> > I should be doing this when better rested.
> 
> No problem, here is v5 with changed synopses.

The clusterdb synopsis had tabs in it, which I understand
is frowned upon in the docs.  I've fixed this.
It looks good to me, passes check and so forth.

Attached is a v6 patch, with no tabs in docs and based
off the latest head.

I'm marking it ready for committer.

Regards,


Karl <k...@meme.com>
Free Software:  "You don't pay back, you pay forward."
                 -- Robert A. Heinlein

diff --git a/doc/src/sgml/ref/clusterdb.sgml b/doc/src/sgml/ref/clusterdb.sgml
index 097ea91..1316932 100644
--- a/doc/src/sgml/ref/clusterdb.sgml
+++ b/doc/src/sgml/ref/clusterdb.sgml
@@ -24,7 +24,17 @@ PostgreSQL documentation
    <command>clusterdb</command>
    <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
    <group choice="opt"><arg choice="plain"><option>--verbose</option></arg><arg choice="plain"><option>-v</option></arg></group>
-   <arg choice="opt"><group choice="plain"><arg choice="plain"><option>--table</option></arg><arg choice="plain"><option>-t</option></arg></group> <replaceable>table</replaceable> </arg>
+
+   <arg choice="plain" rep="repeat">
+     <arg choice="opt">
+       <group choice="plain">
+         <arg choice="plain"><option>--table</option></arg>
+         <arg choice="plain"><option>-t</option></arg>
+       </group>
+       <replaceable>table</replaceable>
+     </arg>
+   </arg>
+
    <arg choice="opt"><replaceable>dbname</replaceable></arg>
   </cmdsynopsis>
 
@@ -117,6 +127,8 @@ PostgreSQL documentation
       <listitem>
        <para>
         Cluster <replaceable class="parameter">table</replaceable> only.
+        Multiple tables can be clustered by writing multiple
+        <option>-t</> switches.
        </para>
       </listitem>
      </varlistentry>
diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml
index f4668e7..0d73294 100644
--- a/doc/src/sgml/ref/pg_restore.sgml
+++ b/doc/src/sgml/ref/pg_restore.sgml
@@ -400,7 +400,8 @@
       <term><option>--table=<replaceable class="parameter">table</replaceable></option></term>
       <listitem>
        <para>
-        Restore definition and/or data of named table only.  This can be
+        Restore definition and/or data of named table only. Multiple tables
+        may be specified with multiple <option>-t</> switches. This can be
         combined with the <option>-n</option> option to specify a schema.
        </para>
       </listitem>
diff --git a/doc/src/sgml/ref/reindexdb.sgml b/doc/src/sgml/ref/reindexdb.sgml
index 781012f..3ba9951 100644
--- a/doc/src/sgml/ref/reindexdb.sgml
+++ b/doc/src/sgml/ref/reindexdb.sgml
@@ -23,20 +23,27 @@ PostgreSQL documentation
   <cmdsynopsis>
    <command>reindexdb</command>
    <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
-   <group choice="opt">
-    <group choice="plain">
-     <arg choice="plain"><option>--table</option></arg>
-     <arg choice="plain"><option>-t</option></arg>
-    </group>
-    <replaceable>table</replaceable>
-   </group>
-   <group choice="opt">
-    <group choice="plain">
-     <arg choice="plain"><option>--index</option></arg>
-     <arg choice="plain"><option>-i</option></arg>
-    </group>
-    <replaceable>index</replaceable>
-   </group>
+
+   <arg choice="plain" rep="repeat">
+    <arg choice="opt">
+     <group choice="plain">
+      <arg choice="plain"><option>--table</option></arg>
+      <arg choice="plain"><option>-t</option></arg>
+     </group>
+     <replaceable>table</replaceable>
+    </arg>
+   </arg>
+
+   <arg choice="plain" rep="repeat">
+    <arg choice="opt">
+     <group choice="plain">
+      <arg choice="plain"><option>--index</option></arg>
+      <arg choice="plain"><option>-i</option></arg>
+     </group>
+     <replaceable>index</replaceable>
+    </arg>
+   </arg>
+
    <arg choice="opt"><replaceable>dbname</replaceable></arg>
   </cmdsynopsis>
 
@@ -128,6 +135,8 @@ PostgreSQL documentation
       <listitem>
        <para>
         Recreate <replaceable class="parameter">index</replaceable> only.
+        Multiple indexes can be recreated by writing multiple
+        <option>-i</> switches.
        </para>
       </listitem>
      </varlistentry>
@@ -158,6 +167,8 @@ PostgreSQL documentation
       <listitem>
        <para>
         Reindex <replaceable class="parameter">table</replaceable> only.
+        Multiple tables can be reindexed by writing multiple
+        <option>-t</> switches.
        </para>
       </listitem>
      </varlistentry>
diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml
index c60ba44..a5216ec 100644
--- a/doc/src/sgml/ref/vacuumdb.sgml
+++ b/doc/src/sgml/ref/vacuumdb.sgml
@@ -24,14 +24,18 @@ PostgreSQL documentation
    <command>vacuumdb</command>
    <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
    <arg rep="repeat"><replaceable>option</replaceable></arg>
-   <arg choice="opt">
-    <group choice="plain">
-     <arg choice="plain"><option>--table</option></arg>
-     <arg choice="plain"><option>-t</option></arg>
-    </group>
-    <replaceable>table</replaceable>
-    <arg choice="opt">( <replaceable class="parameter">column</replaceable> [,...] )</arg>
+
+   <arg choice="plain" rep="repeat">
+    <arg choice="opt">
+     <group choice="plain">
+      <arg choice="plain"><option>--table</option></arg>
+      <arg choice="plain"><option>-t</option></arg>
+     </group>
+     <replaceable>table</replaceable>
+     <arg choice="opt">( <replaceable class="parameter">column</replaceable> [,...] )</arg>
+    </arg>
    </arg>
+
    <arg choice="opt"><replaceable>dbname</replaceable></arg>
   </cmdsynopsis>
 
@@ -147,6 +151,8 @@ PostgreSQL documentation
         Clean or analyze <replaceable class="parameter">table</replaceable> only.
         Column names can be specified only in conjunction with
         the <option>--analyze</option> or <option>--analyze-only</option> options.
+        Multiple tables can be vacuumed by writing multiple
+        <option>-t</> switches.
        </para>
        <tip>
         <para>
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index 611c8e3..88c07be 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -898,24 +898,6 @@ simple_oid_list_append(SimpleOidList *list, Oid val)
 	list->tail = cell;
 }
 
-void
-simple_string_list_append(SimpleStringList *list, const char *val)
-{
-	SimpleStringListCell *cell;
-
-	/* this calculation correctly accounts for the null trailing byte */
-	cell = (SimpleStringListCell *)
-		pg_malloc(sizeof(SimpleStringListCell) + strlen(val));
-	cell->next = NULL;
-	strcpy(cell->val, val);
-
-	if (list->tail)
-		list->tail->next = cell;
-	else
-		list->head = cell;
-	list->tail = cell;
-}
-
 bool
 simple_oid_list_member(SimpleOidList *list, Oid val)
 {
@@ -928,16 +910,3 @@ simple_oid_list_member(SimpleOidList *list, Oid val)
 	}
 	return false;
 }
-
-bool
-simple_string_list_member(SimpleStringList *list, const char *val)
-{
-	SimpleStringListCell *cell;
-
-	for (cell = list->head; cell; cell = cell->next)
-	{
-		if (strcmp(cell->val, val) == 0)
-			return true;
-	}
-	return false;
-}
diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c
index 91f2774..c0b10f0 100644
--- a/src/bin/pg_dump/dumputils.c
+++ b/src/bin/pg_dump/dumputils.c
@@ -17,7 +17,7 @@
 #include <ctype.h>
 
 #include "dumputils.h"
-
+#include "dumpmem.h"
 #include "parser/keywords.h"
 
 
@@ -1349,3 +1349,35 @@ exit_nicely(int code)
 
 	exit(code);
 }
+
+void
+simple_string_list_append(SimpleStringList *list, const char *val)
+{
+    SimpleStringListCell *cell;
+
+    /* this calculation correctly accounts for the null trailing byte */
+    cell = (SimpleStringListCell *)
+        pg_malloc(sizeof(SimpleStringListCell) + strlen(val));
+
+    cell->next = NULL;
+    strcpy(cell->val, val);
+
+    if (list->tail)
+        list->tail->next = cell;
+    else
+        list->head = cell;
+    list->tail = cell;
+}
+
+bool
+simple_string_list_member(SimpleStringList *list, const char *val)
+{
+    SimpleStringListCell *cell;
+
+    for (cell = list->head; cell; cell = cell->next)
+    {
+        if (strcmp(cell->val, val) == 0)
+            return true;
+    }
+    return false;
+}
diff --git a/src/bin/pg_dump/dumputils.h b/src/bin/pg_dump/dumputils.h
index 4ef8cb3..a300e7e 100644
--- a/src/bin/pg_dump/dumputils.h
+++ b/src/bin/pg_dump/dumputils.h
@@ -27,6 +27,19 @@ typedef enum					/* bits returned by set_dump_section */
 	DUMP_UNSECTIONED = 0xff
 } DumpSections;
 
+typedef struct SimpleStringListCell
+{
+    struct SimpleStringListCell *next;
+    char        val[1];         /* VARIABLE LENGTH FIELD */
+} SimpleStringListCell;
+
+typedef struct SimpleStringList
+{
+    SimpleStringListCell *head;
+    SimpleStringListCell *tail;
+} SimpleStringList;
+
+
 typedef void (*on_exit_nicely_callback) (int code, void *arg);
 
 extern int	quote_all_identifiers;
@@ -75,4 +88,8 @@ __attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3), noreturn));
 extern void on_exit_nicely(on_exit_nicely_callback function, void *arg);
 extern void exit_nicely(int code) __attribute__((noreturn));
 
+extern void simple_string_list_append(SimpleStringList *list, const char *val);
+extern bool simple_string_list_member(SimpleStringList *list, const char *val);
+
+
 #endif   /* DUMPUTILS_H */
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 3b49395..9972e68 100644
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -26,7 +26,7 @@
 #include "postgres_fe.h"
 
 #include "pg_dump.h"
-
+#include "dumputils.h"
 #include "libpq-fe.h"
 
 
@@ -125,9 +125,9 @@ typedef struct _restoreOptions
 	int			selTable;
 	char	   *indexNames;
 	char	   *functionNames;
-	char	   *tableNames;
 	char	   *schemaNames;
 	char	   *triggerNames;
+	SimpleStringList tableNames;
 
 	int			useDB;
 	char	   *dbname;
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 1fead28..a810efd 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -2493,7 +2493,7 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
 		{
 			if (!ropt->selTable)
 				return 0;
-			if (ropt->tableNames && strcmp(ropt->tableNames, te->tag) != 0)
+			if (ropt->tableNames.head != NULL && (!(simple_string_list_member(&ropt->tableNames, te->tag))))
 				return 0;
 		}
 		else if (strcmp(te->desc, "INDEX") == 0)
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 2100d43..0ab451a 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -58,17 +58,6 @@ typedef struct SimpleOidList
 	SimpleOidListCell *tail;
 } SimpleOidList;
 
-typedef struct SimpleStringListCell
-{
-	struct SimpleStringListCell *next;
-	char		val[1];			/* VARIABLE LENGTH FIELD */
-} SimpleStringListCell;
-
-typedef struct SimpleStringList
-{
-	SimpleStringListCell *head;
-	SimpleStringListCell *tail;
-} SimpleStringList;
 
 /*
  * The data structures used to store system catalog information.  Every
@@ -532,9 +521,7 @@ extern CollInfo *findCollationByOid(Oid oid);
 extern NamespaceInfo *findNamespaceByOid(Oid oid);
 
 extern void simple_oid_list_append(SimpleOidList *list, Oid val);
-extern void simple_string_list_append(SimpleStringList *list, const char *val);
 extern bool simple_oid_list_member(SimpleOidList *list, Oid val);
-extern bool simple_string_list_member(SimpleStringList *list, const char *val);
 
 extern void parseOidArray(const char *str, Oid *array, int arraysize);
 
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 49d799b..45b8b58 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -234,7 +234,7 @@ main(int argc, char **argv)
 			case 't':			/* Dump data for this table only */
 				opts->selTypes = 1;
 				opts->selTable = 1;
-				opts->tableNames = pg_strdup(optarg);
+				simple_string_list_append(&opts->tableNames, optarg);
 				break;
 
 			case 'U':
@@ -424,7 +424,7 @@ usage(const char *progname)
 	printf(_("  -P, --function=NAME(args)    restore named function\n"));
 	printf(_("  -s, --schema-only            restore only the schema, no data\n"));
 	printf(_("  -S, --superuser=NAME         superuser user name to use for disabling triggers\n"));
-	printf(_("  -t, --table=NAME             restore named table\n"));
+	printf(_("  -t, --table=NAME             restore named table(s)\n"));
 	printf(_("  -T, --trigger=NAME           restore named trigger\n"));
 	printf(_("  -x, --no-privileges          skip restoration of access privileges (grant/revoke)\n"));
 	printf(_("  -1, --single-transaction     restore as a single transaction\n"));
diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile
index 0980b4c..d9ba29d 100644
--- a/src/bin/scripts/Makefile
+++ b/src/bin/scripts/Makefile
@@ -32,7 +32,7 @@ dropdb: dropdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
 droplang: droplang.o common.o print.o mbprint.o | submake-libpq
 dropuser: dropuser.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
 clusterdb: clusterdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
-vacuumdb: vacuumdb.o common.o | submake-libpq
+vacuumdb: vacuumdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
 reindexdb: reindexdb.o common.o dumputils.o kwlookup.o keywords.o | submake-libpq
 
 dumputils.c keywords.c: % : $(top_srcdir)/src/bin/pg_dump/%
diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c
index 261b438..4f163ee 100644
--- a/src/bin/scripts/clusterdb.c
+++ b/src/bin/scripts/clusterdb.c
@@ -58,8 +58,8 @@ main(int argc, char *argv[])
 	bool		echo = false;
 	bool		quiet = false;
 	bool		alldb = false;
-	char	   *table = NULL;
 	bool		verbose = false;
+	SimpleStringList tables = {NULL, NULL};
 
 	progname = get_progname(argv[0]);
 	set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
@@ -98,7 +98,7 @@ main(int argc, char *argv[])
 				alldb = true;
 				break;
 			case 't':
-				table = pg_strdup(optarg);
+				simple_string_list_append(&tables, optarg);
 				break;
 			case 'v':
 				verbose = true;
@@ -140,9 +140,10 @@ main(int argc, char *argv[])
 					progname);
 			exit(1);
 		}
-		if (table)
+
+		if (tables.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot cluster a specific table in all databases\n"),
+			fprintf(stderr, _("%s: cannot cluster specific table(s) in all databases\n"),
 					progname);
 			exit(1);
 		}
@@ -162,9 +163,20 @@ main(int argc, char *argv[])
 				dbname = get_user_name(progname);
 		}
 
-		cluster_one_database(dbname, verbose, table,
-							 host, port, username, prompt_password,
-							 progname, echo);
+		if (tables.head != NULL)
+		{
+			SimpleStringListCell *cell;
+			for (cell = tables.head; cell; cell = cell->next)
+			{
+				cluster_one_database(dbname, verbose, cell->val,
+									 host, port, username, prompt_password,
+									 progname, echo);
+			}
+		}
+		else
+			cluster_one_database(dbname, verbose, NULL,
+								 host, port, username, prompt_password,
+								 progname, echo);
 	}
 
 	exit(0);
@@ -253,7 +265,7 @@ help(const char *progname)
 	printf(_("  -d, --dbname=DBNAME       database to cluster\n"));
 	printf(_("  -e, --echo                show the commands being sent to the server\n"));
 	printf(_("  -q, --quiet               don't write any messages\n"));
-	printf(_("  -t, --table=TABLE         cluster specific table only\n"));
+	printf(_("  -t, --table=TABLE         cluster specific table(s) only\n"));
 	printf(_("  -v, --verbose             write a lot of output\n"));
 	printf(_("  -V, --version             output version information, then exit\n"));
 	printf(_("  -?, --help                show this help, then exit\n"));
diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c
index f61dada..6b1ca49 100644
--- a/src/bin/scripts/reindexdb.c
+++ b/src/bin/scripts/reindexdb.c
@@ -64,8 +64,8 @@ main(int argc, char *argv[])
 	bool		alldb = false;
 	bool		echo = false;
 	bool		quiet = false;
-	const char *table = NULL;
-	const char *index = NULL;
+	SimpleStringList indexes = {NULL, NULL};
+	SimpleStringList tables = {NULL, NULL};
 
 	progname = get_progname(argv[0]);
 	set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
@@ -108,10 +108,10 @@ main(int argc, char *argv[])
 				syscatalog = true;
 				break;
 			case 't':
-				table = pg_strdup(optarg);
+				simple_string_list_append(&tables, optarg);
 				break;
 			case 'i':
-				index = pg_strdup(optarg);
+				simple_string_list_append(&indexes, optarg);
 				break;
 			case 2:
 				maintenance_db = pg_strdup(optarg);
@@ -154,14 +154,14 @@ main(int argc, char *argv[])
 			fprintf(stderr, _("%s: cannot reindex all databases and system catalogs at the same time\n"), progname);
 			exit(1);
 		}
-		if (table)
+		if (tables.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot reindex a specific table in all databases\n"), progname);
+			fprintf(stderr, _("%s: cannot reindex specific table(s) in all databases\n"), progname);
 			exit(1);
 		}
-		if (index)
+		if (indexes.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot reindex a specific index in all databases\n"), progname);
+			fprintf(stderr, _("%s: cannot reindex specific index(es) in all databases\n"), progname);
 			exit(1);
 		}
 
@@ -170,14 +170,14 @@ main(int argc, char *argv[])
 	}
 	else if (syscatalog)
 	{
-		if (table)
+		if (tables.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot reindex a specific table and system catalogs at the same time\n"), progname);
+			fprintf(stderr, _("%s: cannot reindex specific table(s) and system catalogs at the same time\n"), progname);
 			exit(1);
 		}
-		if (index)
+		if (indexes.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot reindex a specific index and system catalogs at the same time\n"), progname);
+			fprintf(stderr, _("%s: cannot reindex specific index(es) and system catalogs at the same time\n"), progname);
 			exit(1);
 		}
 
@@ -206,14 +206,26 @@ main(int argc, char *argv[])
 				dbname = get_user_name(progname);
 		}
 
-		if (index)
-			reindex_one_database(index, dbname, "INDEX", host, port,
-								 username, prompt_password, progname, echo);
-		if (table)
-			reindex_one_database(table, dbname, "TABLE", host, port,
-								 username, prompt_password, progname, echo);
-		/* reindex database only if index or table is not specified */
-		if (index == NULL && table == NULL)
+		if (indexes.head != NULL)
+		{
+			SimpleStringListCell *cell;
+			for (cell = indexes.head; cell; cell = cell->next)
+			{
+				reindex_one_database(cell->val, dbname, "INDEX", host, port,
+									 username, prompt_password, progname, echo);
+			}
+		}
+		if (tables.head != NULL)
+		{
+			SimpleStringListCell *cell;
+			for (cell = tables.head; cell; cell = cell->next)
+			{
+				reindex_one_database(cell->val, dbname, "TABLE", host, port,
+									 username, prompt_password, progname, echo);
+			}
+		}
+		/* reindex database only if neither index nor table is specified */
+		if (indexes.head == NULL && tables.head == NULL)
 			reindex_one_database(dbname, dbname, "DATABASE", host, port,
 								 username, prompt_password, progname, echo);
 	}
@@ -331,10 +343,10 @@ help(const char *progname)
 	printf(_("  -a, --all                 reindex all databases\n"));
 	printf(_("  -d, --dbname=DBNAME       database to reindex\n"));
 	printf(_("  -e, --echo                show the commands being sent to the server\n"));
-	printf(_("  -i, --index=INDEX         recreate specific index only\n"));
+	printf(_("  -i, --index=INDEX         recreate specific index(es) only\n"));
 	printf(_("  -q, --quiet               don't write any messages\n"));
 	printf(_("  -s, --system              reindex system catalogs\n"));
-	printf(_("  -t, --table=TABLE         reindex specific table only\n"));
+	printf(_("  -t, --table=TABLE         reindex specific table(s) only\n"));
 	printf(_("  -V, --version             output version information, then exit\n"));
 	printf(_("  -?, --help                show this help, then exit\n"));
 	printf(_("\nConnection options:\n"));
diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c
index eb28ad4..dc5fcaf 100644
--- a/src/bin/scripts/vacuumdb.c
+++ b/src/bin/scripts/vacuumdb.c
@@ -12,6 +12,7 @@
 
 #include "postgres_fe.h"
 #include "common.h"
+#include "dumputils.h"
 
 
 static void vacuum_one_database(const char *dbname, bool full, bool verbose,
@@ -68,9 +69,9 @@ main(int argc, char *argv[])
 	bool		analyze_only = false;
 	bool		freeze = false;
 	bool		alldb = false;
-	char	   *table = NULL;
 	bool		full = false;
 	bool		verbose = false;
+	SimpleStringList tables = {NULL, NULL};
 
 	progname = get_progname(argv[0]);
 	set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
@@ -118,7 +119,7 @@ main(int argc, char *argv[])
 				alldb = true;
 				break;
 			case 't':
-				table = pg_strdup(optarg);
+				simple_string_list_append(&tables, optarg);
 				break;
 			case 'f':
 				full = true;
@@ -181,9 +182,9 @@ main(int argc, char *argv[])
 					progname);
 			exit(1);
 		}
-		if (table)
+		if (tables.head != NULL)
 		{
-			fprintf(stderr, _("%s: cannot vacuum a specific table in all databases\n"),
+			fprintf(stderr, _("%s: cannot vacuum specific table(s) in all databases\n"),
 					progname);
 			exit(1);
 		}
@@ -204,10 +205,24 @@ main(int argc, char *argv[])
 				dbname = get_user_name(progname);
 		}
 
-		vacuum_one_database(dbname, full, verbose, and_analyze, analyze_only,
-							freeze, table,
-							host, port, username, prompt_password,
-							progname, echo);
+		if (tables.head != NULL)
+		{
+			SimpleStringListCell *cell;
+			for (cell = tables.head; cell; cell = cell->next)
+			{
+				vacuum_one_database(dbname, full, verbose, and_analyze,
+									analyze_only,
+									freeze, cell->val,
+									host, port, username, prompt_password,
+									progname, echo);
+			}
+		}
+		else
+			vacuum_one_database(dbname, full, verbose, and_analyze,
+								analyze_only,
+								freeze, NULL,
+								host, port, username, prompt_password,
+								progname, echo);
 	}
 
 	exit(0);
@@ -348,7 +363,7 @@ help(const char *progname)
 	printf(_("  -f, --full                      do full vacuuming\n"));
 	printf(_("  -F, --freeze                    freeze row transaction information\n"));
 	printf(_("  -q, --quiet                     don't write any messages\n"));
-	printf(_("  -t, --table='TABLE[(COLUMNS)]'  vacuum specific table only\n"));
+	printf(_("  -t, --table='TABLE[(COLUMNS)]'  vacuum specific table(s) only\n"));
 	printf(_("  -v, --verbose                   write a lot of output\n"));
 	printf(_("  -V, --version                   output version information, then exit\n"));
 	printf(_("  -z, --analyze                   update optimizer statistics\n"));

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to