Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中插入多个枚举值_Postgresql_Insert_Enums - Fatal编程技术网

在PostgreSQL中插入多个枚举值

在PostgreSQL中插入多个枚举值,postgresql,insert,enums,Postgresql,Insert,Enums,是否可以在postgres中的一列中插入多个ENUM值 e、 在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') 您

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

e、 在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')
您可以使用来声明您的枚举:

CREATE TYPE tfoo AS ENUM('foo','bar','dummy');
并使用它的名称存储值:

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

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

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

CREATE TABLE foo (foo_id serial primary key);
CREATE TABLE foo_enums (foo_id integer references foo(foo_id), value tfoo);
然后将多个值插入
foo_enum

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');

你的语法完全错误。标识符(列名、表名)既不需要
,也不需要MySQL中愚蠢的反勾号<代码>'foo'不是表名。它是字符串文字(即使使用MySQL)。
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');