vacuumdb: Do not run VACUUM (ONLY_DATABASE_STATS) when --analyze-only.

Previously, vacuumdb --analyze-only issued VACUUM (ONLY_DATABASE_STATS)
at the end. Since --analyze-only is meant to update optimizer statistics only,
this extra VACUUM command is unnecessary.

This commit prevents vacuumdb --analyze-only from running that redundant
VACUUM command.

Author: Fujii Masao <masao.fujii@gmail.com>
Reviewed-by: Mircea Cadariu <cadariu.mircea@gmail.com>
Discussion: https://postgr.es/m/CAHGQGwEqHGa-k=wbRMucUVihHVXk4NQkK94GNN=ym9cQ5HBSHg@mail.gmail.com
This commit is contained in:
Fujii Masao 2025-09-25 01:38:54 +09:00
parent ae8ea7278c
commit 879c492480
2 changed files with 8 additions and 1 deletions

View File

@ -351,5 +351,11 @@ $node->issues_sql_like(
],
qr/statement: ANALYZE public.parent_table/s,
'--analyze-only updates statistics for partitioned tables');
$node->issues_sql_unlike(
[
'vacuumdb', '--analyze-only', 'postgres'
],
qr/statement:\ VACUUM/sx,
'--analyze-only does not run vacuum');
done_testing();

View File

@ -750,7 +750,8 @@ vacuum_one_database(ConnParams *cparams,
}
/* If we used SKIP_DATABASE_STATS, mop up with ONLY_DATABASE_STATS */
if (vacopts->skip_database_stats && stage == ANALYZE_NO_STAGE)
if (vacopts->skip_database_stats && stage == ANALYZE_NO_STAGE &&
!vacopts->analyze_only)
{
const char *cmd = "VACUUM (ONLY_DATABASE_STATS);";
ParallelSlot *free_slot = ParallelSlotsGetIdle(sa, NULL);