#postgresql #sql-insert #postgresql-9.2
Вопрос:
Что у меня есть:
CREATE TYPE Item AS (
a bigint,
b bigint
);
CREATE TABLE items (
id bigint NOT NULL,
a bigint NOT NULL,
b bigint NOT NULL
);
CREATE OR REPLACE FUNCTION items_insert(
_id bigint,
_items Item[]
) RETURNS void AS
...
Как я могу вставить строки с несколькими столбцами в элементы таблицы с одинаковым _id из _items с помощью ОДНОГО запроса с несколькими вставками?
Я использую Postgresql-9.2
Комментарии:
1. Не имеет отношения к вашей проблеме, но: Postgres 9.2 больше не поддерживается , вам следует запланировать обновление как можно скорее.
Ответ №1:
Я думаю, вы имеете в виду «вставить несколько строк«, а не столбцов.
Предполагая, что это правильно, я думаю, что вы ищете подобную функцию:
create or replace function items_insert(_id bigint, _items item[])
returns void
as
$
insert into items (id, a, b)
select _id, it.*
from unnest(_items) as it(a,b);
$
language sql;
Комментарии:
1. Спасибо за заранее. Я нашел более короткий путь:
INSERT INTO items(id, a, b) SELECT _id, (unnest(_items)).*;
2. @КонстантинПрименко: использование
unnest()
в списке выбора не рекомендуется. Лучше использовать его в предложении FROM3. Почему использование
unnest()
вSELECT
списке не рекомендуется?