Re: Disabling vacuum truncate for autovacuum

Nathan Bossart <nathandbossart@gmail.com>

From: Nathan Bossart <nathandbossart@gmail.com>
To: "David G. Johnston" <david.g.johnston@gmail.com>
Cc: Fujii Masao <masao.fujii@oss.nttdata.com>, Robert Treat <rob@xzilla.net>, Laurenz Albe <laurenz.albe@cybertec.at>, Gurjeet Singh <gurjeet@singh.im>, Andres Freund <andres@anarazel.de>, Will Storey <will@summercat.com>, Robert Haas <robertmhaas@gmail.com>, Postgres Hackers <pgsql-hackers@postgresql.org>
Date: 2025-03-20T18:13:02Z
Lists: pgsql-hackers, pgsql-general
On Thu, Mar 20, 2025 at 09:59:45AM -0700, David G. Johnston wrote:
> I get the need for this kind of logic, since we used a boolean for the
> table option, but as a self-proclaimed hack it seems worth more comments
> than provided here.  Especially pertaining to whether this is indeed
> generic or vacuum_truncate specific.  It's unclear since both isset and
> vacuum_truncate_set have been introduced.

I'm happy to expand the comments, but...

> If it is now a general property
> applying to any setting then vacuum_truncate_set shouldn't be needed - we
> should just get the isset value of the existing vacuum_truncate reloption
> by name.

the reason I added this field is because I couldn't find any existing way
to get this information where it's needed.  So, I followed the existing
pattern of adding an offset to something we can access.  This can be used
for any reloption, but currently vacuum_truncate is the only one that does.

How does something like this look for the comment?

	/*
	 * isset_offset is an optional offset of a field in the result struct
	 * that stores whether the value is explicitly set for the relation or
	 * has just picked up the default value.  In most cases, this can be
	 * deduced by giving the reloption a special default value (e.g., -2 is
	 * a common one for integer reloptions), but this isn't always
	 * possible.  One notable example is Boolean reloptions, where it's
	 * difficult to discern the source of the value.  This offset is only
	 * used if given a value greater than zero.
	 */
	int			isset_offset;

-- 
nathan



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Expand comment for isset_offset.

  2. Add vacuum_truncate configuration parameter.