相关疑难解决方法(0)

将多个数组取消嵌套到行中

我已经看到了使用此示例进行批量插入的好方法

WITH p AS (
    INSERT INTO parent_table (column_1) 
    SELECT $1 
    RETURNING id) 
INSERT INTO child_table (parent_table_id, column_a) 
SELECT p.id, a 
FROM   p, unnest($2::text[]) AS a
Run Code Online (Sandbox Code Playgroud)

但是,我需要从多个数组中插入多行,所以我尝试了以下语法:

WITH p AS (
    INSERT INTO parent_table (column_1) 
    SELECT $1 
    RETURNING id) 
INSERT INTO child_table (parent_table_id, column_a, column_b) 
SELECT p.id, a, b 
FROM   p, unnest($2::text[]) AS a, unnest($3::bigint[]) AS b
Run Code Online (Sandbox Code Playgroud)

我在parent_table_idand上有一个主键column_a,当我尝试执行此查询时,Postgres 抱怨重复键冲突。

应该如何解开数组以便它们形成单独的行?

换句话说,如果$2$3都有两个条目,那么第一个条目如何$2只插入第一个条目,$3并且对于各自的第二个条目都相同?

如果这是不可能的,我可以构造一个多维数组吗?如果是这样,它应该如何与多种数组类型一起传递,多维数组语法是什么?

postgresql array set-returning-functions bulk-insert

8
推荐指数
1
解决办法
2万
查看次数