vacuumdb/clusterdb/reindexdb: allow specifying objects to process in all databases
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: pgsql-hackers@postgresql.org
Date: 2023-06-28T23:24:02Z
Lists: pgsql-hackers
Attachments
While working on some other patches, I found myself wanting to use the following command to vacuum the catalogs in all databases in a cluster: vacuumdb --all --schema pg_catalog However, this presently fails with the following error: cannot vacuum specific schema(s) in all databases AFAICT there no technical reason to block this, and the resulting behavior feels intuitive to me, so I wrote 0001 to allow it. 0002 allows specifying tables to process in all databases in clusterdb, and 0003 allows specifying tables, indexes, schemas, or the system catalogs to process in all databases in reindexdb. I debated also allowing users to specify different types of objects in the same command (e.g., "vacuumdb --schema myschema --table mytable"), but it looked like this would require a more substantial rewrite, and I didn't feel that the behavior was intuitive. For the example I just gave, does the user expect us to process both the "myschema" schema and the "mytable" table, or does the user want us to process the "mytable" table in the "myschema" schema? In vacuumdb, this is already blocked, but reindexdb accepts combinations of tables, schemas, and indexes (yet disallows specifying --system along with other types of objects). Since this is inconsistent with vacuumdb and IMO ambiguous, I've restricted such combinations in 0003. Thoughts? -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
Commits
-
reindexdb: Allow specifying objects to process in all databases.
- 24c928ad9ad8 17.0 landed
-
clusterdb: Allow specifying tables to process in all databases.
- 1b49d56d358a 17.0 landed
-
vacuumdb: Allow specifying objects to process in all databases.
- 648928c79bed 17.0 landed