如何在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.3partitionId和jobId会自动重复填充到每一行中current_timestamp会为所有生成的行使用同一个时间戳,和你期望的结果完全匹配
执行这段代码后,completed_subtask_report表就会得到三行符合要求的数据,效率比循环插入高得多,写法也更简洁。
内容的提问来源于stack exchange,提问作者Xbreizh
相关产品推荐
相关产品推荐

