Re: SET WITHOUT OIDS and VACUUM badness? - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: SET WITHOUT OIDS and VACUUM badness?
Date
Msg-id 200402112244.i1BMiA726804@candle.pha.pa.us
Whole thread Raw
In response to Re: SET WITHOUT OIDS and VACUUM badness?  (Gavin Sherry <swm@linuxworld.com.au>)
Responses Re: SET WITHOUT OIDS and VACUUM badness?
Re: SET WITHOUT OIDS and VACUUM badness?
List pgsql-hackers
Gavin Sherry wrote:
> On Wed, 21 Jan 2004, Gavin Sherry wrote:
> 
> > On Wed, 21 Jan 2004, Christopher Kings-Lynne wrote:
> >
> > > This is what we did:
> > >
> > > 0. BEGIN;
> > >
> > > 1. ALTER TABLE ... SET WITHOUT OIDS
> >
> > > 12. ROLLBACK;
> > >
> > > 13. VACUUM FULL forums_posts;
> >
> > The problem here is that this conditional doesn't take into account the
> > change in state which the above transaction causes:
> >
> >             if (onerel->rd_rel->relhasoids &&
> >                 !OidIsValid(HeapTupleGetOid(&tuple)))
> >
> > Tuples inserted after step one have no (valid) OID. However, since we
> > rollback, the change to pg_class.relhasoids => 'f' is rolled back. The
> > only solution I can think of is removing the test or storing relhasoids as
> > a per tuple flag (argh).
> 
> What am I talking about. Can't we test for:
> 
> (&tuple)->t_infomask & HEAP_HASOID
> 
> Instead of:
> 
> onerel->rd_rel->relhasoids

I can confirm we still have this bug:test=> CREATE TABLE foo (a INT);CREATE TABLEtest=> BEGIN;BEGINtest=>   ALTER TABLE
fooSET WITHOUT OIDS;  INSERT INTO foo values (5);ROLLBACK;VACUUM FULL foo;ALTER TABLEtest=>   INSERT INTO foo values
(5);INSERT0 1test=> ROLLBACK;ROLLBACKtest=>test=> VACUUM FULL foo;WARNING:  relation "foo" TID 0/1: OID is
invalidVACUUM

Anyone want to fix it?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [BUGS] Bug in pg_autovacuum ?
Next
From: hong.ge@yale.edu
Date:
Subject: Re: How can I have 2 completely seperated databases in PostgreSQL?