From d9702ce17f2f78d4c5139a241a69c432823f8233 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Wed, 13 Dec 2023 19:20:12 +0000 Subject: [PATCH 1/1] Force autovacuum to use bootstrap superuser --- src/backend/postmaster/autovacuum.c | 7 +++++++ src/backend/utils/init/miscinit.c | 2 +- src/include/miscadmin.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index b04fcfc8c8..f468661916 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -75,6 +75,7 @@ #include "access/xact.h" #include "catalog/dependency.h" #include "catalog/namespace.h" +#include "catalog/pg_authid.h" #include "catalog/pg_database.h" #include "commands/dbcommands.h" #include "commands/vacuum.h" @@ -2025,6 +2026,12 @@ do_autovacuum(void) ALLOCSET_DEFAULT_SIZES); MemoryContextSwitchTo(AutovacMemCxt); + /* + * Autovacuum must be run as superuser, so set the session userid to the + * bootstrap superuser id. + */ + SetSessionUserId(BOOTSTRAP_SUPERUSERID, true); + /* Start a transaction so our commands have one to play into. */ StartTransactionCommand(); diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 819936ec02..10bc2add2a 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -546,7 +546,7 @@ GetSessionUserId(void) } -static void +void SetSessionUserId(Oid userid, bool is_superuser) { Assert(SecurityRestrictionContext == 0); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 1043a4d782..4f56c85333 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -354,6 +354,7 @@ extern char *GetUserNameFromId(Oid roleid, bool noerr); extern Oid GetUserId(void); extern Oid GetOuterUserId(void); extern Oid GetSessionUserId(void); +extern void SetSessionUserId(Oid userid, bool is_superuser); extern Oid GetAuthenticatedUserId(void); extern void GetUserIdAndSecContext(Oid *userid, int *sec_context); extern void SetUserIdAndSecContext(Oid userid, int sec_context); -- 2.40.1