Использование цикла для вставки данных типа массива в PostgreSQL

#arrays #postgresql #loops

#массивы #postgresql #циклы

Вопрос:

Я хотел бы вставить данные массива equip в таблицу с помощью цикла.

 var svr = 1;
var equip = [3, 4, 5];
 

Для этого мне нужно вставить данные три раза.

Выглядит так:

 INSERT INTO khnp.link_server_equipment_map(svr, equip)
VALUES (1, 3);

INSERT INTO khnp.link_server_equipment_map(svr, equip)
VALUES (1, 4);

INSERT INTO khnp.link_server_equipment_map(svr, equip)
VALUES (1, 5);

 

Может кто-нибудь, пожалуйста, вытащить меня из этой кроличьей норы? Спасибо

Ответ №1:

Вы можете попробовать unnest:

 INSERT INTO khnp.link_server_equipment_map(svr, equip) 
VALUES (1,  UNNEST(ARRAY[3, 4, 5]));`
 

Ответ №2:

Вы можете использовать INSERT инструкцию для вставки нескольких строк.

 INSERT INTO table_name (column_list)
VALUES
    (value_list_1),
    (value_list_2),
    ...
    (value_list_n);
 

Согласно вашему упомянутому примеру данных, вставка строк будет выполняться следующим образом

    INSERT INTO khnp.link_server_equipment_map(svr, equip) VALUES
     (1, 3),
     (1, 4),
     (1, 5);
 

Также, чтобы избежать добавления содержимого массива по одному, вы можете использовать UNNEST функцию array .