Re: BUG #17973: Reinit of pgstats entry for dropped DB can break autovacuum daemon

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: Andres Freund <andres@anarazel.de>, Jacob Speidel <jacob@extrahop.com>, Will Mortensen <will@extrahop.com>, pgsql-bugs@lists.postgresql.org
Date: 2023-09-01T03:31:09Z
Lists: pgsql-bugs
On Thu, Aug 31, 2023 at 07:56:13PM -0700, Nathan Bossart wrote:
> On Fri, Sep 01, 2023 at 10:08:57AM +0900, Michael Paquier wrote:
>> +	/*
>> +	 * Now that we rechecked, we are certain to be connected to a database and
>> +	 * thus can set MyDatabaseId.
>> +	 */
>> +	MyDatabaseId = dboid;
> 
> Perhaps we should expand this comment to make it clear that some code
> depends on this to avoid races with concurrent database drops/renames.

Yeah, this could be a bit more detailed, mentioning the dependency
with the pgstat shutdown callback.  How about appending the following
sentence in a second paragraph, say:
"Setting MyDatabaseId after rechecking the existence of the database
matters for instance with the shutdown callback of the shared
statistics, as pgstat_report_stat() will update database statistics
depending on MyDatabaseId."
--
Michael

Commits

  1. Fix handling of shared statistics with dropped databases

  2. Accept fractional seconds in jsonpath's datetime() method.