Re: Modifying an existing table to use an ENUM instead of an int

Поиск
Список
Период
Сортировка
От Mike Christensen
Тема Re: Modifying an existing table to use an ENUM instead of an int
Дата
Msg-id AANLkTimYujPEuDPaVhylsB0e0N9CXJUuhUQ_uLJ5UQI9@mail.gmail.com
обсуждение исходный текст
Ответ на Modifying an existing table to use an ENUM instead of an int  (Mike Christensen <mike@kitchenpc.com>)
Ответы Re: Modifying an existing table to use an ENUM instead of an int  (Mike Christensen <mike@kitchenpc.com>)
Список pgsql-general
Ok, I'm convinced this should work but it does not:

CREATE FUNCTION ConvertIntToOrderStateEnum(state integer) RETURNS
OrderStateEnum AS
$BODY$
SELECT CASE WHEN $1=0 then 'Preview'::OrderStateEnum
   WHEN $1=1 then 'InQueue'::OrderStateEnum
   WHEN $1=2 then 'Ordered'::OrderStateEnum
   WHEN $1=3 then 'Error'::OrderStateEnum
   WHEN $1=4 then 'Cancelled'::OrderStateEnum ELSE NULL END;
$BODY$
LANGUAGE 'sql' IMMUTABLE STRICT;

ALTER TABLE orders ALTER orderstate TYPE OrderStateEnum
USING ConvertIntToOrderStateEnum(OrderState);

I get the error:

ERROR: operator does not exist: orderstateenum >= integer
SQL state: 42883
Hint: No operator matches the given name and argument type(s). You
might need to add explicit type casts.

On Mon, Jun 7, 2010 at 12:11 AM, Mike Christensen <mike@kitchenpc.com> wrote:
> Hi all -
>
> I have an existing table that looks like this:
>
> CREATE TABLE orders
> (
>  --Bunch of stuff you don't care about
>  orderstate integer NOT NULL,
>  --Etc
> )
>
> with a bunch of data in it.  I've now created this new data type:
>
> CREATE TYPE OrderStateEnum AS ENUM ('Preview', 'InQueue', 'Ordered',
> 'Error', 'Cancelled');
>
> I want to change the type of "orderstate" from integer to
> OrderStateEnum, and cast 0 to Preview, 1 to InQueue, 2 to Ordered,
> etc.
>
> I could create a new column, copy all the data over, then delete the
> old column, but I suspect there's some cool way to go about doing
> this.  Thanks!
>
> Mike
>
> PS - This is totally shameless, but if you cook or your spouse does,
> I'd totally appreciate it if you could take a short survey to help us
> develop this website we're working on.  We're hoping to get about a
> thousand responses so I have to plug it everywhere :)  This URL is
> http://survey.kitchenpc.com/
>

В списке pgsql-general по дате отправления:

Предыдущее
От: Mike Christensen
Дата:
Сообщение: Modifying an existing table to use an ENUM instead of an int
Следующее
От: Mike Christensen
Дата:
Сообщение: Re: Modifying an existing table to use an ENUM instead of an int