2017-02-21 32 views
1

У меня есть ENUM колонку в Postgres 9.6:Postgres: добавить описание значения ENUM?

CREATE TYPE my_type AS ENUM('foo', 'bar'); 

Я хотел бы добавить описание удобочитаемый для каждого значения в перечислении, например, для foo, This is the foo value and it does stuff.

Есть ли способ сделать это в Postgres? Мне хотелось бы что-то вроде Django's choices field.

ответ

0

Ничего не придумано. Стандартный comment ..

t=# \x 
Expanded display is on. 
t=# comment on type my_type is 'foo: something fooish, bar: a place to avoid'; 
COMMENT 
t=# \dT+ my_type 
List of data types 
-[ RECORD 1 ]-----+--------------------------------------------- 
Schema   | public 
Name    | my_type 
Internal name  | my_type 
Size    | 4 
Elements   | foo           + 
        | bar 
Owner    | postgres 
Access privileges | 
Description  | foo: something fooish, bar: a place to avoid 

с каким-то извращенец фантазии:

t=# comment on type my_type is '{"foo": "something fooish", "bar": "a place to avoid"}'; 
COMMENT 
t=# select pg_catalog.obj_description(t.oid, 'pg_type')::json->>'foo' from pg_type t where typname = 'my_type'; 
    ?column? 
------------------ 
something fooish 
(1 row) 
0

Teoretically вы можете создать два типа с одинаковой размерности и использовать что-то вроде этого:

CREATE TYPE my_type AS ENUM('foo', 'bar'); 
CREATE TYPE my_type_description AS ENUM('foo desc', 'bar desc'); 

CREATE FUNCTION show_desc(i my_type) RETURNS my_type_description AS $sql$ 
    SELECT ((enum_range(NULL::my_type_description))[array_length(enum_range(NULL, i), 1)])::my_type_description; 
$sql$ LANGUAGE SQL STABLE; 

SELECT show_desc('foo'); 

show_desc 
----------- 
foo desc 
(1 row) 

SELECT show_desc('bar'); 

show_desc 
----------- 
bar desc 
(1 row) 

 Смежные вопросы

  • Нет связанных вопросов^_^