Re: Minor necessary/sufficient slip-up? - Mailing list pgsql-docs

From Peter Eisentraut
Subject Re: Minor necessary/sufficient slip-up?
Date
Msg-id 278b0a93-78df-498b-9284-162230e7db90@eisentraut.org
Whole thread Raw
In response to Re: Minor necessary/sufficient slip-up?  (Laurenz Albe <laurenz.albe@cybertec.at>)
List pgsql-docs
On 03.09.25 09:52, Laurenz Albe wrote:
> On Tue, 2025-09-02 at 08:22 +0000, PG Doc comments form wrote:
>> Page: https://www.postgresql.org/docs/17/routine-vacuuming.html
>>
>> This is a most pedantic point, but since the postgres documentation is
>> incredibly accurate and well written I indulge my pedantry this one time:
>>
>> Regarding the last sentence of the first paragraph of 24.1.5: I sure hope
>> vacuuming every table in every database at least once every two billion
>> transactions is not only necessary to avoid catastrophic data loss, but also
>> sufficient. Indeed if I understand the subsequent explanation, it is
>> sufficient but not necessary.
>>
>> Here is the full paragraph:
>>
>> 24.1.5. Preventing Transaction ID Wraparound Failures
>> PostgreSQL's MVCC transaction semantics depend on being able to compare
>> transaction ID (XID) numbers: a row version with an insertion XID greater
>> than the current transaction's XID is “in the future” and should not be
>> visible to the current transaction. But since transaction IDs have limited
>> size (32 bits) a cluster that runs for a long time (more than 4 billion
>> transactions) would suffer transaction ID wraparound: the XID counter wraps
>> around to zero, and all of a sudden transactions that were in the past
>> appear to be in the future — which means their output become invisible. In
>> short, catastrophic data loss. (Actually the data is still there, but that's
>> cold comfort if you cannot get at it.) To avoid this, it is necessary to
>> vacuum every table in every database at least once every two billion
>> transactions.
>>
>> Suggested change for the last sentence:
>> To avoid this, it suffices to vacuum every table in every database at least
>> once every two billion transactions.
> 
> I don't think that that would be an improvement.  Yes, it is sufficient, but
> it is also necessary.  And the "necessary" part is the more important one.
> As reader, I would implicitly assume that VACUUM is sufficient, otherwise
> the nice writers of the documentation would surely have told me what else I
> have to do to avoid that scary eventuality.
> 
> I'd be OK with writing "necessary and sufficient".  Or is that too much
> legalese?

I think this introductory sentence establishes the necessity only.  The 
rest of the section and chapter establishes the sufficiency.




pgsql-docs by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: Minor necessary/sufficient slip-up?
Next
From: David Booth
Date:
Subject: Re: pg_upgrade, can you use the rsync method of upgrading a standby if you used clone mode?