PostgreSQL插入bigint[]数组引用语法

5

我需要使用数字数组更新现有行。目前,我对引号的语法困惑(我认为是这个原因)。以下是我尝试过的查询...

测试1

WITH update_table_1 (id,column_b) AS 
(VALUES (1,'{22}'), (72,'{29, 5}')) 
UPDATE table_1 SET id = up.id, column_b = up.column_b FROM update_table_1 up 
WHERE up.id = table_1.id;

测试2

WITH update_table_1 (id,column_b) AS 
(VALUES (1,'{"22"}'), (72,'{"29","5"}')) 
UPDATE table_1 SET id = up.id, column_b = up.column_b FROM update_table_1 up 
WHERE up.id = table_1.id;

测试 3

WITH update_table_1 (id,column_b) AS 
(VALUES (1,{22}), (72,{29, 5})) 
UPDATE table_1 SET id = up.id, column_b = up.column_b FROM update_table_1 up 
WHERE up.id = table_1.id;

测试4

WITH update_table_1 (id,column_b) AS 
(VALUES (1,{22}), (72,{"29","5"})) 
UPDATE table_1 SET id = up.id, column_b = up.column_b FROM update_table_1 up 
WHERE up.id = table_1.id;

2
使用强制类型转换:'{1,2}'::bigint[] - Daniel Vérité
@DanielVérité 谢谢,麻烦您把它发布为答案,这样我就可以接受它了。 - user3750809
1个回答

15

你需要使用类型转换、数组[]构造函数或两者结合使用:

select '{1,2}'::bigint[];
select array[1,2];           -- this is an int[]
select array[1,2]::bigint[];
否则,Postgres将(正确地)抱怨类型和类似类型的未知运算符。

1
手册对此并没有过多的提及;相关页面似乎应该是第8.15节 数组,其中只有这个括号注释:“(这些数组常量实际上只是讨论在第4.1.2.7节中讨论的通用类型常量的特例。常量最初被视为字符串并传递给数组输入转换程序。可能需要显式类型说明。)” - IMSoP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接