7

ENUMpostgresの列に複数の値を挿入することは可能ですか?

たとえば、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')
4

1 に答える 1

18

CREATE TYPE列挙型を宣言するために使用できます。

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

または

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');
于 2013-02-25T18:06:17.133 に答える