vacuumdb: Allow specifying objects to process in all databases.
Presently, vacuumdb's --table, --schema, and --exclude-schema options cannot be used together with --all, i.e., you cannot specify tables or schemas to process in all databases. This commit removes this unnecessary restriction, thus enabling potentially useful commands like "vacuumdb --all --schema pg_catalog". Reviewed-by: Kyotaro Horiguchi, Dean Rasheed Discussion: https://postgr.es/m/20230628232402.GA1954626%40nathanxps13
This commit is contained in:
parent
674e49c73c
commit
648928c79b
@ -36,7 +36,13 @@ PostgreSQL documentation
|
||||
</arg>
|
||||
</arg>
|
||||
|
||||
<arg choice="opt"><replaceable>dbname</replaceable></arg>
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><replaceable>dbname</replaceable></arg>
|
||||
<arg choice="plain"><option>-a</option></arg>
|
||||
<arg choice="plain"><option>--all</option></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</cmdsynopsis>
|
||||
|
||||
<cmdsynopsis>
|
||||
@ -47,40 +53,44 @@ PostgreSQL documentation
|
||||
<arg choice="plain" rep="repeat">
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain">
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><option>-n</option></arg>
|
||||
<arg choice="plain"><option>--schema</option></arg>
|
||||
</group>
|
||||
<replaceable>schema</replaceable>
|
||||
</arg>
|
||||
</arg>
|
||||
|
||||
<arg choice="plain">
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><option>-N</option></arg>
|
||||
<arg choice="plain"><option>--exclude-schema</option></arg>
|
||||
</group>
|
||||
<replaceable>schema</replaceable>
|
||||
</arg>
|
||||
</arg>
|
||||
<arg choice="plain"><option>-n</option></arg>
|
||||
<arg choice="plain"><option>--schema</option></arg>
|
||||
</group>
|
||||
<replaceable>schema</replaceable>
|
||||
</arg>
|
||||
</arg>
|
||||
|
||||
<arg choice="opt"><replaceable>dbname</replaceable></arg>
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><replaceable>dbname</replaceable></arg>
|
||||
<arg choice="plain"><option>-a</option></arg>
|
||||
<arg choice="plain"><option>--all</option></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</cmdsynopsis>
|
||||
|
||||
<cmdsynopsis>
|
||||
<command>vacuumdb</command>
|
||||
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
|
||||
<arg rep="repeat"><replaceable>option</replaceable></arg>
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><option>-a</option></arg>
|
||||
<arg choice="plain"><option>--all</option></arg>
|
||||
</group>
|
||||
|
||||
<arg choice="plain" rep="repeat">
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><option>-N</option></arg>
|
||||
<arg choice="plain"><option>--exclude-schema</option></arg>
|
||||
</group>
|
||||
<replaceable>schema</replaceable>
|
||||
</arg>
|
||||
</arg>
|
||||
|
||||
<arg choice="opt">
|
||||
<group choice="plain">
|
||||
<arg choice="plain"><replaceable>dbname</replaceable></arg>
|
||||
<arg choice="plain"><option>-a</option></arg>
|
||||
<arg choice="plain"><option>--all</option></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
|
@ -184,18 +184,18 @@ $node->command_fails_like(
|
||||
[ 'vacuumdb', '-n', 'pg_catalog', '-N', '"Foo"', 'postgres' ],
|
||||
qr/cannot vacuum all tables in schema\(s\) and exclude schema\(s\) at the same time/,
|
||||
'cannot use options -n and -N at the same time');
|
||||
$node->command_fails_like(
|
||||
[ 'vacuumdb', '-a', '-N', '"Foo"' ],
|
||||
qr/cannot exclude specific schema\(s\) in all databases/,
|
||||
'cannot use options -a and -N at the same time');
|
||||
$node->command_fails_like(
|
||||
[ 'vacuumdb', '-a', '-n', '"Foo"' ],
|
||||
qr/cannot vacuum specific schema\(s\) in all databases/,
|
||||
'cannot use options -a and -n at the same time');
|
||||
$node->command_fails_like(
|
||||
[ 'vacuumdb', '-a', '-t', '"Foo".bar' ],
|
||||
qr/cannot vacuum specific table\(s\) in all databases/,
|
||||
'cannot use options -a and -t at the same time');
|
||||
$node->issues_sql_like(
|
||||
[ 'vacuumdb', '-a', '-N', 'pg_catalog' ],
|
||||
qr/(?:(?!VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class).)*/,
|
||||
'vacuumdb -a -N');
|
||||
$node->issues_sql_like(
|
||||
[ 'vacuumdb', '-a', '-n', 'pg_catalog' ],
|
||||
qr/VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class/,
|
||||
'vacuumdb -a -n');
|
||||
$node->issues_sql_like(
|
||||
[ 'vacuumdb', '-a', '-t', 'pg_class' ],
|
||||
qr/VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class/,
|
||||
'vacuumdb -a -t');
|
||||
$node->command_fails_like(
|
||||
[ 'vacuumdb', '-a', '-d', 'postgres' ],
|
||||
qr/cannot vacuum all databases and a specific one at the same time/,
|
||||
|
@ -72,6 +72,7 @@ static void vacuum_one_database(ConnParams *cparams,
|
||||
static void vacuum_all_databases(ConnParams *cparams,
|
||||
vacuumingOptions *vacopts,
|
||||
bool analyze_in_stages,
|
||||
SimpleStringList *objects,
|
||||
int concurrentCons,
|
||||
const char *progname, bool echo, bool quiet);
|
||||
|
||||
@ -378,6 +379,7 @@ main(int argc, char *argv[])
|
||||
|
||||
vacuum_all_databases(&cparams, &vacopts,
|
||||
analyze_in_stages,
|
||||
&objects,
|
||||
concurrentCons,
|
||||
progname, echo, quiet);
|
||||
}
|
||||
@ -429,18 +431,6 @@ check_objfilter(void)
|
||||
(objfilter & OBJFILTER_DATABASE))
|
||||
pg_fatal("cannot vacuum all databases and a specific one at the same time");
|
||||
|
||||
if ((objfilter & OBJFILTER_ALL_DBS) &&
|
||||
(objfilter & OBJFILTER_TABLE))
|
||||
pg_fatal("cannot vacuum specific table(s) in all databases");
|
||||
|
||||
if ((objfilter & OBJFILTER_ALL_DBS) &&
|
||||
(objfilter & OBJFILTER_SCHEMA))
|
||||
pg_fatal("cannot vacuum specific schema(s) in all databases");
|
||||
|
||||
if ((objfilter & OBJFILTER_ALL_DBS) &&
|
||||
(objfilter & OBJFILTER_SCHEMA_EXCLUDE))
|
||||
pg_fatal("cannot exclude specific schema(s) in all databases");
|
||||
|
||||
if ((objfilter & OBJFILTER_TABLE) &&
|
||||
(objfilter & OBJFILTER_SCHEMA))
|
||||
pg_fatal("cannot vacuum all tables in schema(s) and specific table(s) at the same time");
|
||||
@ -895,6 +885,7 @@ static void
|
||||
vacuum_all_databases(ConnParams *cparams,
|
||||
vacuumingOptions *vacopts,
|
||||
bool analyze_in_stages,
|
||||
SimpleStringList *objects,
|
||||
int concurrentCons,
|
||||
const char *progname, bool echo, bool quiet)
|
||||
{
|
||||
@ -927,7 +918,7 @@ vacuum_all_databases(ConnParams *cparams,
|
||||
|
||||
vacuum_one_database(cparams, vacopts,
|
||||
stage,
|
||||
NULL,
|
||||
objects,
|
||||
concurrentCons,
|
||||
progname, echo, quiet);
|
||||
}
|
||||
@ -941,7 +932,7 @@ vacuum_all_databases(ConnParams *cparams,
|
||||
|
||||
vacuum_one_database(cparams, vacopts,
|
||||
ANALYZE_NO_STAGE,
|
||||
NULL,
|
||||
objects,
|
||||
concurrentCons,
|
||||
progname, echo, quiet);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user