PostgreSQL INSERT到一个枚举数组

时间:2013-08-14 14:47:30

标签: postgresql types enums sql-insert

如何插入array of enums
这是我的enum

CREATE TYPE equipment AS ENUM ('projector','PAsystem','safe','PC','phone');

然后我的桌子上有一系列设备:

CREATE TABLE lecture_room (
   id INTEGER DEFAULT NEXTVAL('lecture_id_seq')
 , seatCount int
 , equipment equipment[]
) INHERITS(venue);

这是我要插入的ATTEMPT:

INSERT INTO lecture_room (building_code, floorNo,  roomNo, length, width
                        , seatCount, equipment) 
VALUES 
('IT', 4, 2, 10, 15 ,120, ARRAY['projector','PAsystem','safe']),

但它给了我以下错误:

ERROR: column "equipment" is of type equipment[] but expression is of type text[]
SQL state: 42804
Hint: You will need to rewrite or cast the expression.

4 个答案:

答案 0 :(得分:12)

PostgreSQL不知道如何自动将text类型的输入转换为类型equipment的输入。您必须明确声明您的字符串为equipment类型:

ARRAY['projector','PAsystem','safe']::equipment[]

我用SQL Fiddle确认了这一点。

答案 1 :(得分:7)

ARRAY constructor like @Mark correctly supplied的替代方法是直接投射字符串文字

'{projector,PAsystem,safe}'::equipment[]

此变体较短,有些客户端的ARRAY构造函数存在问题,这是一个类似函数的元素。

答案 2 :(得分:6)

老问题,但是一个新的答案。在Postgres的现代版本中(用9.6测试),这些都不是必需的。它按预期工作:

INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}');

答案 3 :(得分:2)

除了@harm答案之外,您还可以跳过引号:

INSERT INTO lecture_room (equipment) VALUES ('{projector, safe}');