PostgreSQL INSERT到一个枚举数组

Zap*_*ica 11 postgresql enums types sql-insert

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

CREATE TYPE equipment AS ENUM ('projector','PAsystem','safe','PC','phone');
Run Code Online (Sandbox Code Playgroud)

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

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

这是我要插入的ATTEMPT:

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

但它给了我以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

Mar*_*erg 16

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

ARRAY['projector','PAsystem','safe']::equipment[]
Run Code Online (Sandbox Code Playgroud)

我用SQL Fiddle证实了这一点.


小智 12

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

INSERT INTO lecture_room (equipment) VALUES ('{projector, safe}');
Run Code Online (Sandbox Code Playgroud)


Erw*_*ter 10

正确提供的@Mark之类ARRAY构造函数 的替代方法是直接转换字符串文字:

'{projector,PAsystem,safe}'::equipment[]
Run Code Online (Sandbox Code Playgroud)

这个变体更短,一些客户端遇到了ARRAY构造函数的问题,这是一个类似函数的元素.


har*_*arm 8

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

INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}');
Run Code Online (Sandbox Code Playgroud)