반응형
복수의 값을 한 번에 포스트그레스 테이블에 삽입하려면 어떻게 해야 합니까?
한 번에 여러 값을 업데이트하려는 테이블이 있습니다.다음은 테이블 스키마입니다.
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
반응형
'programing' 카테고리의 다른 글
원격 태그를 삭제하려면 어떻게 해야 합니까? (0) | 2023.05.05 |
---|---|
Angular - ng: 명령을 찾을 수 없습니다. (0) | 2023.05.05 |
ExpandoObject의 진정한 이점은 무엇입니까? (0) | 2023.05.05 |
이클립스에서 동적 웹 프로젝트의 컨텍스트 루트를 변경하는 방법은 무엇입니까? (0) | 2023.05.05 |
하위 디렉터리를 제외한 모든 것을 무시하도록 Git에게 어떻게 말합니까? (0) | 2023.05.05 |