On 10/24/2010 03:33 PM, Tom Lane wrote:
Dean Rasheed<[email protected]> 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
