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>
|
</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>
|
||||||
|
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
@ -47,40 +53,44 @@ PostgreSQL documentation
|
|||||||
<arg choice="plain" rep="repeat">
|
<arg choice="plain" rep="repeat">
|
||||||
<arg choice="opt">
|
<arg choice="opt">
|
||||||
<group choice="plain">
|
<group choice="plain">
|
||||||
<arg choice="plain">
|
<arg choice="plain"><option>-n</option></arg>
|
||||||
<arg choice="opt">
|
<arg choice="plain"><option>--schema</option></arg>
|
||||||
<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>
|
|
||||||
</group>
|
</group>
|
||||||
|
<replaceable>schema</replaceable>
|
||||||
</arg>
|
</arg>
|
||||||
</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>
|
||||||
|
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>vacuumdb</command>
|
<command>vacuumdb</command>
|
||||||
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
|
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
|
||||||
<arg rep="repeat"><replaceable>option</replaceable></arg>
|
<arg rep="repeat"><replaceable>option</replaceable></arg>
|
||||||
<group choice="plain">
|
|
||||||
<arg choice="plain"><option>-a</option></arg>
|
<arg choice="plain" rep="repeat">
|
||||||
<arg choice="plain"><option>--all</option></arg>
|
<arg choice="opt">
|
||||||
</group>
|
<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>
|
</cmdsynopsis>
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
@ -184,18 +184,18 @@ $node->command_fails_like(
|
|||||||
[ 'vacuumdb', '-n', 'pg_catalog', '-N', '"Foo"', 'postgres' ],
|
[ 'vacuumdb', '-n', 'pg_catalog', '-N', '"Foo"', 'postgres' ],
|
||||||
qr/cannot vacuum all tables in schema\(s\) and exclude schema\(s\) at the same time/,
|
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');
|
'cannot use options -n and -N at the same time');
|
||||||
$node->command_fails_like(
|
$node->issues_sql_like(
|
||||||
[ 'vacuumdb', '-a', '-N', '"Foo"' ],
|
[ 'vacuumdb', '-a', '-N', 'pg_catalog' ],
|
||||||
qr/cannot exclude specific schema\(s\) in all databases/,
|
qr/(?:(?!VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class).)*/,
|
||||||
'cannot use options -a and -N at the same time');
|
'vacuumdb -a -N');
|
||||||
$node->command_fails_like(
|
$node->issues_sql_like(
|
||||||
[ 'vacuumdb', '-a', '-n', '"Foo"' ],
|
[ 'vacuumdb', '-a', '-n', 'pg_catalog' ],
|
||||||
qr/cannot vacuum specific schema\(s\) in all databases/,
|
qr/VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class/,
|
||||||
'cannot use options -a and -n at the same time');
|
'vacuumdb -a -n');
|
||||||
$node->command_fails_like(
|
$node->issues_sql_like(
|
||||||
[ 'vacuumdb', '-a', '-t', '"Foo".bar' ],
|
[ 'vacuumdb', '-a', '-t', 'pg_class' ],
|
||||||
qr/cannot vacuum specific table\(s\) in all databases/,
|
qr/VACUUM \(SKIP_DATABASE_STATS\) pg_catalog.pg_class/,
|
||||||
'cannot use options -a and -t at the same time');
|
'vacuumdb -a -t');
|
||||||
$node->command_fails_like(
|
$node->command_fails_like(
|
||||||
[ 'vacuumdb', '-a', '-d', 'postgres' ],
|
[ 'vacuumdb', '-a', '-d', 'postgres' ],
|
||||||
qr/cannot vacuum all databases and a specific one at the same time/,
|
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,
|
static void vacuum_all_databases(ConnParams *cparams,
|
||||||
vacuumingOptions *vacopts,
|
vacuumingOptions *vacopts,
|
||||||
bool analyze_in_stages,
|
bool analyze_in_stages,
|
||||||
|
SimpleStringList *objects,
|
||||||
int concurrentCons,
|
int concurrentCons,
|
||||||
const char *progname, bool echo, bool quiet);
|
const char *progname, bool echo, bool quiet);
|
||||||
|
|
||||||
@ -378,6 +379,7 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
vacuum_all_databases(&cparams, &vacopts,
|
vacuum_all_databases(&cparams, &vacopts,
|
||||||
analyze_in_stages,
|
analyze_in_stages,
|
||||||
|
&objects,
|
||||||
concurrentCons,
|
concurrentCons,
|
||||||
progname, echo, quiet);
|
progname, echo, quiet);
|
||||||
}
|
}
|
||||||
@ -429,18 +431,6 @@ check_objfilter(void)
|
|||||||
(objfilter & OBJFILTER_DATABASE))
|
(objfilter & OBJFILTER_DATABASE))
|
||||||
pg_fatal("cannot vacuum all databases and a specific one at the same time");
|
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) &&
|
if ((objfilter & OBJFILTER_TABLE) &&
|
||||||
(objfilter & OBJFILTER_SCHEMA))
|
(objfilter & OBJFILTER_SCHEMA))
|
||||||
pg_fatal("cannot vacuum all tables in schema(s) and specific table(s) at the same time");
|
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,
|
vacuum_all_databases(ConnParams *cparams,
|
||||||
vacuumingOptions *vacopts,
|
vacuumingOptions *vacopts,
|
||||||
bool analyze_in_stages,
|
bool analyze_in_stages,
|
||||||
|
SimpleStringList *objects,
|
||||||
int concurrentCons,
|
int concurrentCons,
|
||||||
const char *progname, bool echo, bool quiet)
|
const char *progname, bool echo, bool quiet)
|
||||||
{
|
{
|
||||||
@ -927,7 +918,7 @@ vacuum_all_databases(ConnParams *cparams,
|
|||||||
|
|
||||||
vacuum_one_database(cparams, vacopts,
|
vacuum_one_database(cparams, vacopts,
|
||||||
stage,
|
stage,
|
||||||
NULL,
|
objects,
|
||||||
concurrentCons,
|
concurrentCons,
|
||||||
progname, echo, quiet);
|
progname, echo, quiet);
|
||||||
}
|
}
|
||||||
@ -941,7 +932,7 @@ vacuum_all_databases(ConnParams *cparams,
|
|||||||
|
|
||||||
vacuum_one_database(cparams, vacopts,
|
vacuum_one_database(cparams, vacopts,
|
||||||
ANALYZE_NO_STAGE,
|
ANALYZE_NO_STAGE,
|
||||||
NULL,
|
objects,
|
||||||
concurrentCons,
|
concurrentCons,
|
||||||
progname, echo, quiet);
|
progname, echo, quiet);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user