如何插入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.
答案 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}');