Re: Oid registry - Mailing list pgsql-hackers

From Antonin Houska
Subject Re: Oid registry
Date
Msg-id 5062FF3D.8070701@gmail.com
Whole thread Raw
In response to Oid registry  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: Oid registry  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
I'm also implementing an extension where direct access to non-fixed OIDs
(i.e. no catalog cache lookup by name) would be very helpful. I spent some
time thinking about a workaround that makes OID registry unnecessary.
How about the following?

1. Add a new varlena column to pg_proc catalog table, say 
'ext_types',containing
C array of OIDs.

2. Let each extension declare requirements like the following in its 
configuration
files:

"I expect <some type's name> type at 0-th position of 'ext_types' array."
"I expect <other type's name> type at 1-st position of 'ext_types' array."
etc.

3. Ensure that CREATE EXTENSION command reads all these type names, 
finds the
appropriate OIDs in pg_type and puts them to the appropriate position in 
the 'ext_types'
column for each function of the new extension (while in-core types would 
have it set to
NULL of course).

4. Implement a macro to get the 0-th, 1-st, etc. value from 
pg_proc.ext_types (via FMGR).

Is there any serious circumstance I forgot or does it seem to be e.g. 
too invasive?

Kind regards,
Tony H.

On 09/25/2012 12:59 AM, Andrew Dunstan wrote:
> This rather overdue mail arises out the developer's meeting back in 
> May, where we discussed an item I raised suggesting an Oid registry.
>
> The idea came from some difficulties I encountered when I did the 
> backport of the JSON work we did in 9.2 to 9.1, but has wider 
> application. Say someone writes an extension that defines type A. You 
> want to write an extension that takes advantage of that type, but it's 
> difficult if you don't know the type's Oid, and of course currently 
> there is no way of knowing for sure what it is unless it's a builtin 
> type. So the proposal is to have an Oid registry, in which authors 
> could in effect reserve an Oid (or a couple of Oids) for a type. We 
> would guarantee that these Oids would be reserved in just the same way 
> Oids for builtins are reserved, and #define symbolic constants for the 
> reserved Oids. To make that viable, we'd need to extend the CREATE 
> commands for any objects we could reserve Oids for to allow for the 
> specification of the Oids, somewhat like:
>
>    CREATE TYPE newtype ( ....) WITH (TYPEOID = 123456, TYPEARRAYOID =
>    234567);
>
> I'm not sure what objects we would need this for other than types, but 
> CREATE TYPE would be a good start anyway.
>
> Another suggestion that was made during the discussion was that we 
> should also reserve a range of Oids for private use, and guarantee 
> that those would never be allocated, somewhat analogously to RFC1918 
> IP addresses.
>
> thoughts?
>
> If there is general agreement I want to get working on this fairly soon.
>
> cheers
>
> andrew
>
>
>
>




pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: autovacuum stress-testing our system
Next
From: Andres Freund
Date:
Subject: Re: pg_reorg in core?