PostgreSQL: как определить тип ENUM с помощью пользовательских значений emunsortorder - PullRequest
0 голосов
/ 13 декабря 2018

Есть ли способ создать тип ENUM с индивидуальным индексом заказа.Впоследствии можно обновить pg_type и установить для поля enumsortorder желаемое значение, но вопрос можно ли сделать во время создания?Например, что-то вроде

CREATE TYPE environment AS ENUM ('stage' 10, 'prod' 20);

1 Ответ

0 голосов
/ 13 декабря 2018

Порядок сортировки определяется объявлением типа:

create type my_enum as enum ('first', 'third');

with t(v) as (
    values ('first'::my_enum), ('third')
)
select *
from t
order by 1;

   v   
-------
 first
 third
(2 rows)

Вы можете добавить новую метку в желаемую позицию:

alter type my_enum add value 'second' before 'third';

with t(v) as (
    values ('first'::my_enum), ('third'), ('second')
)
select *
from t
order by 1;

   v    
--------
 first
 second
 third
(3 rows)    

Подробнее о CREATE TYPE и ALTER TYPE

Если вышеприведенного недостаточно, используйте функцию карты, например:

create or replace function my_enum_map(my_enum)
returns int language sql as $$
    select case $1 
        when 'first' then 100
        when 'second' then 50
        when 'third' then 75
    end
$$;

with t(v) as (
    values ('first'::my_enum), ('third'), ('second')
)
select *
from t
order by my_enum_map(v);

   v    
--------
 second
 third
 first
(3 rows)

Вы также можете сохранить значения, используемыефункция в таблице для упрощения внесения изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...