Hi, On Tue, Feb 03, 2026 at 03:04:41PM -0600, Nathan Bossart wrote: > On Tue, Feb 03, 2026 at 10:55:20PM +0200, Heikki Linnakangas wrote: > > I propose a little refactoring, attached, to replace the "isRegularBackend" > > field in PGPROC with full "backendType". > > > > Andres briefly suggested this a while back [1]: > > > > On Fri, 22 Nov 2024 at 22:13, Andres Freund <andres(at)anarazel(dot)de> > > wrote: > >> Or we could have a copy of the backend type in PGPROC. > > > > but we didn't follow up on that approach. I don't see why, it seems so much > > simpler than what we ended up doing. Am I missing something? > > At a glance, it looks reasonable to me. I don't recall whether I explored > this approach, but at the very least I'm unaware of any reason it wouldn't > work. > > > @@ -684,7 +684,7 @@ InitAuxiliaryProcess(void) > > MyProc->databaseId = InvalidOid; > > MyProc->roleId = InvalidOid; > > MyProc->tempNamespaceId = InvalidOid; > > - MyProc->isRegularBackend = false; > > + MyProc->backendType = B_INVALID; > > MyProc->delayChkptFlags = 0; > > MyProc->statusFlags = 0; > > MyProc->lwWaiting = LW_WS_NOT_WAITING; > > Hm. So for auxiliary processes, this would always be unset? That appears > to be alright for today's use-cases, but it could be a problem down the > road.
Yeah, and that would contradict what their associated "Main" functions set. For example, for the checkpointer we now have: (gdb) p MyProc->backendType $1 = B_INVALID (gdb) p MyBackendType $2 = B_CHECKPOINTER <---- set by CheckpointerMain() Also one point to notice: - bool isRegularBackend; /* true if it's a regular backend. */ + BackendType backendType; /* what kind of process is this? */ we're going from 1 byte to 4 bytes and that does not change the struct size (thanks to the padding): still 832 bytes. I guess that's good that it is still a multiple of 64. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
