Как вставить несколько значений в таблицу postgres сразу?


у меня есть таблица, что я пытаюсь обновить несколько значений сразу. Вот схема таблицы:

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

у меня есть user_id и хотите вставить несколько subservice_id - х сразу. Есть ли синтаксис Postgres это позволит мне сделать что-то подобное

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

как бы я это сделал?

5 61

5 ответов:

попробуй:

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

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

многозначный синтаксис вставки:

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

но ответ крокодилко гораздо более гладкий.

более короткая версия ответа крокодилко:

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

немного связанный ответ, потому что я продолжаю находить этот вопрос каждый раз, когда я пытаюсь вспомнить это решение. вставить несколько строк с несколькими столбцами:

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

более надежной примеру, если вам нужно вставить несколько строк в таблице для каждой строки в другой таблице:

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;