2013-02-25 2 views
2

Возможно ли вставить более одного значения ENUM в столбце в postgres?Вставить несколько значений ENUM в PostgreSQL

например. В Mysql я могу это сделать.

create table 'foo'(
    'foo_id' smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `foo_enum` enum('foo','bar','dummy') DEFAULT 'foo', 
); 

insert into 'foo' ('foo_id', 'foo_enum') values (1, 'foo, bar') 
+0

Ваш синтаксис совершенно неправильно. Идентификатор (имя столбца, имя таблицы) не нуждается ни в '' ', ни в том, что глупый обратный путь от MySQL. '' foo'' '* не * имя таблицы. Это строковый литерал (даже с MySQL). –

ответ

9

Вы можете использовать CREATE TYPE, чтобы объявить перечисление:

CREATE TYPE tfoo AS ENUM('foo','bar','dummy'); 

И использовать array его для хранения значений:

CREATE TABLE foo (foo_id serial, foo_enum tfoo[]); 

Для вставки:

INSERT INTO foo(foo_enum) VALUES('{foo,bar}'); 

Или

INSERT INTO foo(foo_enum) VALUES(ARRAY['foo','bar']::tfoo[]); 

Другой подход заключается в использовании другой таблицы для хранения перечислений и внешнего ключа в таблице foo. Пример:

CREATE TABLE foo (foo_id serial primary key); 
CREATE TABLE foo_enums (foo_id integer references foo(foo_id), value tfoo); 

И их вставить несколько значений в foo_enums:

INSERT INTO foo(foo_id) VALUES(nextval('foo_id_seq')); 
INSERT INTO foo_enums(foo_id, value) VALUES 
    (currval('foo_id_seq'), 'foo'), 
    (currval('foo_id_seq'), 'bar'); 
+0

Спасибо @matheusol – Toki

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