Re: WIP: extensible enums

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Dean Rasheed <dean.a.rasheed@gmail.com>, Greg Stark <gsstark@mit.edu>, Robert Haas <robertmhaas@gmail.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2010-10-24T21:09:18Z
Lists: pgsql-hackers

On 10/24/2010 03:33 PM, Tom Lane wrote:
> Dean Rasheed<dean.a.rasheed@gmail.com>  writes:
>> The point with an OID array is that you wouldn't need to store the
>> enumsortorder values at all. The sort order would just be the index of
>> the OID in the array. So the comparison code would read the OID array,
>> traverse it building an array of enum_sort structs {oid, idx}, sort
>> that by OID and cache it.
> Hmm.  But I guess we'd have to keep that array in the pg_type row,
> and it'd be a huge PITA to work with at the SQL level.  For instance,
> psql and pg_dump can easily be adapted to use enumsortorder instead
> of pg_enum.oid when they want to read out the labels in sorted order.
> Doing the same with an array representation would be a very different
> and much uglier query.  I'm not eager to contort the catalog
> representation that much.

If that's the only objection I don't know that it's terribly serious. 
psql and pg_dump could sanely use something like:

    select enum_oid, row_number() over () as sort_order
    from unnest(null::myenum) as enum_oid

That said, I'm generally wary of array fields, especially in the catalog.

cheers

andrew