2013-02-25 67 views
2

是否可以在postgres中的列中插入多個ENUM值?在PostgreSQL中插入多個ENUM值

例如在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)。 – 2013-02-25 18:09:32

回答

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 2013-02-25 18:36:21