programing

복수의 값을 한 번에 포스트그레스 테이블에 삽입하려면 어떻게 해야 합니까?

yellowcard 2023. 5. 5. 08:48
반응형

복수의 값을 한 번에 포스트그레스 테이블에 삽입하려면 어떻게 해야 합니까?

한 번에 여러 값을 업데이트하려는 테이블이 있습니다.다음은 테이블 스키마입니다.

    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]);

어떻게 해야 하나요?

다중 값 삽입 구문은 다음과 같습니다.

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

하지만 크로코딜코의 대답은 훨씬 더 매끄럽습니다.

시도:

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

크로코딜코의 대답은 다음과 같습니다.

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;

값을 한 번 가져오지만 중복을 방지하는 좋은 방법은 다음과 같습니다.

insert into schema.mytable (col1,col2) 
select col1, col2 from schema.mytable 
UNION
values 
('row1-col1','row1-col2'),
('row2-col1','row2-col2'),
('row3-col1','row3-col2')
except
select col1, col2 from schema.mytable;

여러 값의 경우 이 함수가 유용할 수 있습니다.

이 함수는 여러 값을 생성합니다.

const _multiInsert = arrOfValues => {
    // removes lastCharacter
    const _remLastChar = str => str.slice(0, str.length - 1);

      let foramttedQuery = '';

      arrOfValues.forEach(row => {
        let newRow = '';
        for (const val of Object.values(row)) {
          let newValue = '';
          if (typeof val === 'string') newValue = `'${val}',`;
          else newValue = `${val},`;
          newRow = newRow.concat(newValue);
        }

        foramttedQuery = foramttedQuery.concat(`(${_remLastChar(newRow)}),`);
      });

      return _remLastChar(foramttedQuery);
    };

    const arr_Of_Values = [
        {
            id: 1,
            name: "SAMPLE_NAME_1",
        },
        {
            id: 2,
            name: "SAMPLE_NAME2",
        }
    ]

    const query_template = `INSERT INTO TABLE_NAME VALUES ${_multiInsert(arr_Of_Values)}`
    
 console.log(query_template)   

언급URL : https://stackoverflow.com/questions/20815028/how-do-i-insert-multiple-values-into-a-postgres-table-at-once

반응형