From: Michael Paquier [mailto:mich...@paquier.xyz] > + /* Does the backend own the temp schema? */ > + if (proc->tempNamespaceId != namespaceID) > + return false; > I have a very hard time believing that this is safe lock-less, and a spin > lock would be enough it seems.
The lwlock in BackendIdGetProc() flushes the CPU cache so that proc->tempNamespaceId reflects the latest value. Or, do you mean another spinlock elsewhere? > + /* Is the backend connected to this database? */ > + if (proc->databaseId != MyDatabaseId) > + return false; > Wouldn't it be more interesting to do this cleanup as well if the backend > is *not* connected to the database autovacuum'ed? This would make the > cleanup more aggresive, which is better. IIUC, the above code does what you suggest. proc->databaseId is the database the client is connected to, and MyDatabaseId is the database being autovacuumed (by this autovacuum worker.) Regards Takayuki Tsunakawa