You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中无需循环将数组作为新行批量插入?

解决PostgreSQL数组拆分行批量插入的问题

嗨,你完全不需要用循环或者中间表,PostgreSQL内置的unnest()函数就是专门处理这类场景的利器,直接用INSERT ... SELECT就能一次性完成需求!

你之前的代码之所以会把整个数组作为一行插入,是因为直接将数组变量放入VALUES中时,PostgreSQL会把它当作单个列值处理。而unnest()可以把数组的每个元素拆成独立的行,配合SELECT语句就能生成你需要的多行数据。

正确的实现代码

DO $do$
DECLARE
    partitionId varchar(48)='tenant';
    jobId varchar(40)='job1';
    taskIds varchar[] := '{job1.1, job1.5, job1.3}';
begin
    -- 使用INSERT ... SELECT结合unnest拆分数组
    INSERT INTO completed_subtask_report
    SELECT partitionId, jobId, unnest(taskIds), current_timestamp;
END $do$

代码说明

  • unnest(taskIds)会把你的taskIds数组拆分成三行独立的varchar值:job1.1、job1.5、job1.3
  • partitionId和jobId会自动重复填充到每一行中
  • current_timestamp会为所有生成的行使用同一个时间戳,和你期望的结果完全匹配

执行这段代码后,completed_subtask_report表就会得到三行符合要求的数据,效率比循环插入高得多,写法也更简洁。

内容的提问来源于stack exchange,提问作者Xbreizh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:22:58