Re: [RFC] Removing "magic" oids

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Noah Misch <noah@leadboat.com>
Cc: pgsql-hackers@postgresql.org
Date: 2019-07-20T19:56:34Z
Lists: pgsql-hackers
Hi,

On 2019-07-20 11:21:52 -0700, Noah Misch wrote:
> On Fri, Jul 19, 2019 at 10:12:57AM -0700, Andres Freund wrote:
> > On 2019-07-07 10:00:35 -0700, Noah Misch wrote:
> > > +# Test concurrent OID generation via pg_enum_oid_index.  This indirectly
> > > +# exercises LWLock and spinlock concurrency.
> > > +my $labels = join ',', map { "'l$_'" } 1 .. 1000;
> > >  pgbench(
> > >  	'--no-vacuum --client=5 --protocol=prepared --transactions=25',
> > >  	0,
> > >  	[qr{processed: 125/125}],
> > >  	[qr{^$}],
> > > -	'concurrent insert workload',
> > > +	'concurrent OID generation',
> > >  	{
> > >  		'001_pgbench_concurrent_insert' =>
> > > -		  'INSERT INTO insert_tbl SELECT FROM generate_series(1,1000);'
> > > +		  "CREATE TYPE pg_temp.e AS ENUM ($labels); DROP TYPE pg_temp.e;"
> > >  	});
> > 
> > Hm, perhaps we should just do something stupid an insert into a catalog
> > table, determining the oid to insert with pg_nextoid?  That ought to be a
> > lot faster and thus more "stress testing" than going through a full
> > blown DDL statement?  But perhaps that's just too ugly.
> 
> I expect the pg_nextoid strategy could have sufficed.  The ENUM strategy
> wastes some time parsing 1000 label names, discarding odd-numbered OIDs, and
> dropping the type.  The pg_nextoid strategy wastes time by performing the
> insertion loop in the executor instead of dedicated C code of
> EnumValuesCreate().  Hard to say how to weight those factors.

Fair enough. Are you planning to commit your changes?

Greetings,

Andres Freund



Commits

  1. Revive test of concurrent OID generation.

  2. Fix typo introduced in 578b229718.

  3. Fix pg_upgrade for oid removal.

  4. Fix sepgsql compile error caused by oid removal.

  5. Remove WITH OIDS support, change oid catalog column visibility.