Преобразование целого числа в Enum в PostgreSQL

Я создал перечисление пользовательского типа данных следующим образом:

create type "bnfunctionstype" as enum ( 
    'normal', 
    'library', 
    'import', 
    'thunk', 
    'adjustor_thunk' 
);

Из внешнего источника данных я получаю целые числа в диапазоне [0,4]. Я хотел бы преобразовать эти целые числа в соответствующие значения перечисления.

Как я могу это сделать?

Я использую PostgreSQL 8.4.


person BuschnicK    schedule 01.12.2009    source источник


Ответы (3)


Если у вас есть такое перечисление:

CREATE TYPE payment_status AS ENUM ('preview', 'pending', 'paid', 
                                    'reviewing', 'confirmed', 'cancelled');

Вы можете создать список допустимых элементов следующим образом:

SELECT i, (enum_range(NULL::payment_status))[i] 
  FROM generate_series(1, array_length(enum_range(NULL::payment_status), 1)) i

Который дает:

 i | enum_range 
---+------------
 1 | preview
 2 | pending
 3 | paid
 4 | reviewing
 5 | confirmed
 6 | cancelled
(6 rows)
person Johan Dahlin    schedule 03.06.2013

person    schedule
comment
Это выглядит очень элегантно - я попробую в понедельник (когда вернусь в офис) и благодарю вас за ответ... - person BuschnicK; 02.12.2009

person    schedule
comment
Мне нужно сделать это для нескольких типов перечислений, поэтому мне бы очень хотелось избежать повторения всех отдельных значений и создания хранимой процедуры для каждого из них. - person BuschnicK; 02.12.2009