此问题在此处已有答案:
Correct syntax for array of composite type(2个答案)
4天前关闭。
我在Postgres工作。我有下面的复合类型
CREATE TYPE negotiation.diff_type AS
(
operation int,
content text
);
字符串
这是我的table
CREATE temp TABLE temp_input
(
indication_request_id int,
para_id int,
line_number int,
document_id int,
modified_content text,
created_by text,
diffs diff_type[]
);
型
在表中,我使用的是diff复合类型。
下面我将数据插入表中。
INSERT INTO temp_input (myid, para_id, line_number, document_id,modified_content,created_by, diffs)
VALUES (20,2893,10,18,'my content','user1', '{(1,"DDD")"}');
型
我得到这个错误:
错误:格式错误的数组文字:“{(1,“DDD”)"}”
3条答案
按热度按时间toe950271#
你需要用引号将数组的每个元素括起来,然后在复杂类型的字面量中转义引号:
字符串
SQLFiddle Demo
xurqigkl2#
下面是如何创建一个包含
negotiation.diff_type
数组的文字:字符串
qhhrdooz3#
概念验证
演示命令的正确语法是:
字符串
多个输入行和多个数组元素的正确语法:
型
只需向Postgres询问正确的语法(psql摘录):
型
试验项目:
型
反向测试:
型
fiddle
(Note dbfiddle.uk中的当前错误显示:它吞下
\
的内部级别。正如你所看到的,你需要在每一行文字(=复合元素类型)周围加上双引号,但在嵌套的字符串周围不要加双引号,除非它包含特殊字符。然后你必须转义这些,这在此时会因为多层嵌套而变得非常混乱。让Postgres为你做吧。
参见:
更好
不要从开始就去那里。就像Laurenz评论的那样,表定义中的复合数据类型通常表明对正确的数据库设计的误解。考虑一个中间规范化的模式。