Когда приложение передаёт несколько связанных массивов, не нужно отдельно делать
unnest(), нумеровать элементы и потом соединять их по позиции.SELECT *
FROM unnest(
ARRAY[101, 102, 103],
ARRAY['book', 'mouse', 'keyboard'],
ARRAY[2, 1, 4]
) AS x(id, name, qty);
PostgreSQL сопоставит элементы по позиции и сразу вернёт строки
101/book/2, 102/mouse/1, 103/keyboard/4.Это удобно и для bulk-операций:
INSERT INTO order_items (product_id, quantity)
SELECT *
FROM unnest(
:product_ids::bigint[],
:quantities::integer[]
);
Можно обновлять пачку строк тем же способом:
UPDATE products p
SET price = x.price
FROM unnest(
:ids::bigint[],
:prices::numeric[]
) AS x(id, price)
WHERE p.id = x.id;
🔥
unnest(array1, array2, ...) объединяет связанные массивы в строки и позволяет массово добавлять или обновлять данные одним запросом.➡️ SQL Ready | #совет
