On 5/16/26 12:47 AM, Mohamed ALi wrote:
Hi hackers,

Attached is a patch that adds --exclude-database (-D) to vacuumdb,
allowing users to skip specific databases when using --all.

Motivation
----------

"vacuumdb --all" vacuums every connectable database without exception.
In production environments, operators often need to skip certain databases
during maintenance — for example, test databases, large inactive databases
with historical data.
The current workaround is to manually vacuum each database
individually or write wrapper scripts.

The parameter "D and d(dname)" conforms to the usage of "N and n." Adhering to the original definition, this is fine.

In the vacuum_all_databases function. If the condition 'if (dbsToExclude)' is used. All 'exclude-database' processing (including variable definitions) can be placed in a separate code block. How about this? Irrelevant personal preferences.

--
Quan Zongliang

Usage
-----

     vacuumdb --all --exclude-database=test_db
     vacuumdb --all -D db1 -D db2 -D db3

The option requires --all

Testing
-------

The patch passes all existing vacuumdb TAP tests (100_vacuumdb,
101_vacuumdb_all, 102_vacuumdb_stages) and includes 4 new TAP tests
in 101_vacuumdb_all.pl covering exclusion, multiple exclusions, and
error cases.

I've also attached a standalone test script (test_exclude_database.sh)
that exercises the feature with 11 test scenarios:

   1. Single database exclusion
   2. Multiple database exclusions (-D db1 -D db2)
   3. Exclude all databases
   4. Exclude non-existent database (silently ignored)
   5. Exclude maintenance database (postgres)
   6. Case sensitivity (exact case excludes, wrong case does not)
   7. --exclude-database without --all (error)
   8. --exclude-database with -d (error)
   9. SQL injection protection
  10. --help output
  11. -d with -D and --all (conflicting options error)

All tests pass. The test script is portable — it uses standard libpq
environment variables and auto-detects binaries. Test output is also
attached (test_exclude_database_results.txt).




Reply via email to