Re: How to modify ENUM datatypes?

From: "D(dot) Dante Lorenso" <dante(at)lorenso(dot)com>
To: Andreas 'ads' Scherbaum <adsmail(at)wars-nicht(dot)de>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How to modify ENUM datatypes?
Date: 2008-04-22 20:45:39
Message-ID: 480E4E73.4070402@lorenso.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Andreas 'ads' Scherbaum wrote:
> On Tue, 22 Apr 2008 20:58:30 +0800 Craig Ringer wrote:
>> D. Dante Lorenso wrote:
>>> The problem is that once I create a column in my account table that
>>> uses this 'account_type' datatype, I can't seem to change or add to it
>>> any more. I want to add a new value or edit/delete an existing one.
>>> How do you make changes to an ENUM datatype that is already in use?
>> As far as I know ENUM is not well suited to uses where new enumeration
>> members may be added later. A lookup table and a foreign key is probably
>> better for this sort of use.
> I remember the discussions before PG implemented ENUMs at all - some
> people voted against this "feature" because they knew that questions
> about modifing the enum values would pop up sooner or later.
>> You *can* add elements to an enum type - sort of - by creating a new
>> type and converting columns. It's ugly, though, and will be hard to get
>> right when the column of interest is referenced by foreign keys and such.
> If there's one request to modify a specific ENUM column, other requests
> will follow because the enum set is not as static as it seems in the
> first place. So i beg that the only advise should be "change the column
> to a foreign key construct". Converting columns to new data types is
> much more overhead anyway.

So, the advice here is "don't use ENUM"?

I was really hoping that it would be more efficient to not have to do
all the foreign keys and joins for tables that may have 4-5 enum types.

Just being able to:

SELECT *
FROM tablename

would be nice if my columns contained enums instead of doing:

SELECT *
FROM tablename, lookuptable
WHERE tablename.some_id = lookuptable.some_id

Isn't the join more expensive?

-- Dante

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Christophe 2008-04-22 20:52:36 Re: How to modify ENUM datatypes?
Previous Message Jonathan Bond-Caron 2008-04-22 20:44:20 Re: Schema migration tools?