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)
但它给了我以下错误:
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.
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构造函数的问题,这是一个类似函数的元素.
老问题,但一个新的答案.在Postgres的现代版本中(用9.6测试),这些都不是必需的.它按预期工作:
INSERT INTO lecture_room (equipment) VALUES ('{"projector", "safe"}');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9216 次 |
| 最近记录: |