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 TABLE test=> BEGIN; BEGIN test=> ALTER TABLE foo SET WITHOUT OIDS; INSERT INTO foo values (5); ROLLBACK; VACUUM FULL foo; ALTER TABLE test=> INSERT INTO foo values (5); INSERT 0 1 test=> ROLLBACK; ROLLBACK test=> test=> VACUUM FULL foo; WARNING: relation "foo" TID 0/1: OID is invalid VACUUM Anyone want to fix it? -- Bruce Momjian | http://candle.pha.pa.us [EMAIL PROTECTED] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives? http://archives.postgresql.org