From 029354cf40fea428c20de09ccacc6afe503c73f6 Mon Sep 17 00:00:00 2001
From: Daniil Davidov <d.davydov@postgrespro.ru>
Date: Thu, 19 Mar 2026 21:19:35 +0700
Subject: [PATCH] fixes for 0002

---
 src/backend/access/common/reloptions.c    | 2 +-
 src/backend/postmaster/autovacuum.c       | 6 +++++-
 src/backend/utils/misc/guc_parameters.dat | 2 +-
 src/include/utils/rel.h                   | 7 -------
 4 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index 055585c38f3..03e6fae930e 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -238,7 +238,7 @@ static relopt_int intRelOpts[] =
 	{
 		{
 			"autovacuum_parallel_workers",
-			"Maximum number of parallel autovacuum workers that can be used for processing this table.",
+			"Overrides value of the autovacuum_max_parallel_workers parameter for this table, if > -1.",
 			RELOPT_KIND_HEAP,
 			ShareUpdateExclusiveLock
 		},
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index ff57d8fca2a..e810e1303db 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -2866,7 +2866,11 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
 			if (avopts->autovacuum_parallel_workers > 0)
 				nparallel_workers = avopts->autovacuum_parallel_workers;
 			else if (avopts->autovacuum_parallel_workers == -1)
-				nparallel_workers = 0;
+			{
+				nparallel_workers = autovacuum_max_parallel_workers > 0
+					? autovacuum_max_parallel_workers
+					: -1; /* disable parallelism if parameter's value is 0 */
+			}
 		}
 
 		tab->at_params.freeze_min_age = freeze_min_age;
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index bc23ddf5201..3d2fd35a004 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -155,7 +155,7 @@
 },
 
 { name => 'autovacuum_max_parallel_workers', type => 'int', context => 'PGC_SIGHUP', group => 'VACUUM_AUTOVACUUM',
-  short_desc => 'Maximum number of parallel processes per autovacuuming of one table.',
+  short_desc => 'Maximum number of parallel workers that can be used by a single autovacuum worker.',
   variable => 'autovacuum_max_parallel_workers',
   boot_val => '2',
   min => '0',
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index 1981954008e..cd1e92f2302 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -312,14 +312,7 @@ typedef struct AutoVacOpts
 {
 	bool		enabled;
 
-	/*
-	 * Target number of parallel autovacuum workers. 0 by default disables
-	 * parallel vacuum during autovacuum. -1 means choose the parallel degree
-	 * based on the number of indexes (the autovacuum_max_parallel_workers
-	 * parameter will be used as a limit).
-	 */
 	int			autovacuum_parallel_workers;
-
 	int			vacuum_threshold;
 	int			vacuum_max_threshold;
 	int			vacuum_ins_threshold;
-- 
2.43.0

