如何一次将多个值插入postgres表?

时间:2013-12-28 13:20:02

标签: postgresql

我有一张表,我试图一次更新多个值。这是表模式:

    Column     |  Type   | Modifiers 
---------------+---------+-----------
 user_id       | integer | 
 subservice_id | integer |

我有user_id,想要一次插入多个subservice_idPostgres中是否有语法可以让我做这样的事情

insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);

我该怎么做?

5 个答案:

答案 0 :(得分:145)

多值插入语法是:

insert into table values (1,1), (1,2), (1,3), (2,1);

但是krokodilko的答案更加流畅。

答案 1 :(得分:42)

尝试:

INSERT INTO user_subservices(user_id, subservice_id) 
SELECT 1 id, x
FROM    unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x

演示:http://www.sqlfiddle.com/#!15/9a006/1

答案 2 :(得分:17)

krokodilko答案的缩短版本:

insert into user_subservices(user_id, subservice_id) 
values(1, unnest(array[1, 2, 3]));

答案 3 :(得分:7)

一个稍微相关的答案,因为我每次尝试记住这个解决方案时都会不断发现这个问题。 插入多列多行

insert into user_subservices (user_id, subservice_id)
select *
from unnest(array[1, 2], array[3, 4]);

答案 4 :(得分:1)

更强大的示例,当您需要为另一个表中的每一行向某个表中插入多行时:

INSERT INTO user_subservices (user_id, subservice_id)
SELECT users.id AS user_id, subservice_id
FROM users
CROSS JOIN unnest(ARRAY[1,2,3]) subservice_id;