Re: The vacuum-ignore-vacuum patch - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: The vacuum-ignore-vacuum patch
Date
Msg-id 200607281528.k6SFSKA18098@momjian.us
Whole thread Raw
In response to Re: The vacuum-ignore-vacuum patch  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > Good question.  Imagine you have a serializable transaction like
> > pg_dump, and then you have lots of newer transactions.  If pg_dump is
> > xid=12, and all the new transactions start at xid=30, any row created
> > and expired between 12 and 30 can be removed because they are not
> > visible.
> 
> This reasoning is bogus.
> 
> It would probably be safe for pg_dump because it's a read-only
> operation, but it fails badly if the serializable transaction is trying
> to do updates.  An update needs to chase the chain of newer versions of
> the row forward from the version that's visible to the xact's
> serializable snapshot, to see if anyone has committed a newer version.
> Your proposal would remove elements of that chain, thereby possibly
> allowing the serializable xact to conclude it may update the tuple
> when it should have given an error.

So in fact members of the chain are not visible, but vacuum doesn't have
a strong enough lock to remove parts of the chain.  What seems strange
is that vacuum can trim the chain, but only if you do members starting
from the head.  I assume this is because you don't need to rejoin the
chain around the expired tuples.

("bogus" seems a little strong.)

--  Bruce Momjian   bruce@momjian.us EnterpriseDB    http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Saurabh Vyas
Date:
Subject: facing problem while using CVS
Next
From: Tom Lane
Date:
Subject: Re: [Pgbuildfarm-members] [Fwd: RE: Build farm on Windows]