在PostgreSQL中插入多个ENUM值

Tok*_*oki 4 postgresql enums insert

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

例如,在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')
Run Code Online (Sandbox Code Playgroud)

Mat*_*sOl 13

你可以CREATE TYPE用来声明你的枚举:

CREATE TYPE tfoo AS ENUM('foo','bar','dummy');
Run Code Online (Sandbox Code Playgroud)

并使用它的数组来存储值:

CREATE TABLE foo (foo_id serial, foo_enum tfoo[]);
Run Code Online (Sandbox Code Playgroud)

要插入:

INSERT INTO foo(foo_enum) VALUES('{foo,bar}');
Run Code Online (Sandbox Code Playgroud)

要么

INSERT INTO foo(foo_enum) VALUES(ARRAY['foo','bar']::tfoo[]);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用另一个表来存储枚举和外键到foo表.例:

CREATE TABLE foo (foo_id serial primary key);
CREATE TABLE foo_enums (foo_id integer references foo(foo_id), value tfoo);
Run Code Online (Sandbox Code Playgroud)

然后他们将多个值插入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');
Run Code Online (Sandbox Code Playgroud)