Postgres : 즉각적인 사용을 위해 한 스키마에서 다른 스키마로 큰 데이터 하위 집합 (10k + 행) 복사

postgresql sqlbulkcopy

문제

난 하나의 Postgres 스키마에서 필요에 따라 다른 곳으로 행을 밀어 넣을 필요가있다. 하나의 스키마는 내용을 저장하고 다른 하나는 최종 사용자가 자신의 사용자 정의 용도로 추가, 수정, 삭제할 데이터 하위 집합의 복사본입니다. 10 만 건 이상의 레코드가 있으며 더 많은 컨텐츠가 추가되고 더 많은 컨텐츠가 최종 사용자에 의해 흡수되고 사용자 정의되면 각 스키마 테이블에서 증가합니다. 데이터 이동은 여러 테이블에서 다른 스키마의 여러 ​​테이블에 이르는 수천 개의 레코드가됩니다. 이러한 스키마는 동일한 데이터베이스에 있습니다. 이 데이터는 항상 이동하므로 최종 사용자가 콘텐츠를 선택한 직후에 맞춤 설정을 시작할 수 있도록 매우 빠를 필요가 있습니다. 복제 기능을 트리거 할뿐만 아니라 COPY 기능을 살펴 보았지만 필요한만큼 빠르게 수행 할 수있는 기능은 없습니다. 이러한 테이블은 소비자가 끊임없이 자주 사용하므로 삽입하기 전에 색인을 제거 할 수 없습니다. 모든 조언을 크게 주시면 감사하겠습니다.

수락 된 답변

데이터베이스의 한 스키마에있는 여러 테이블에서 동일한 데이터베이스의 다른 스키마로 복사하고 있으므로 가장 빠른 방법은 INSERT INTO ... SELECT FROM 을 사용하여 수행 할 때까지 시작할 수 없습니다. 두 스키마에 모두 액세스 할 수있는 사용자 (예 :

INSERT INTO schema2.table_y ( field, field, field )
SELECT field, field, field
FROM schema1.table_y
WHERE user filter condition

여러 테이블에서이 작업을 수행해야하므로 하나의 큰 트랜잭션으로 래핑하거나 하나의 큰 쿼리로 쓰기 가능 CTE 를 사용하여 여러 insert 문을 실행할 수 있습니다.

이것이 실제로 데이터의 복사본 을 얻는 가장 빠른 방법이 될 것입니다. 그러나 여전히 0이 아닌 시간이 소요됩니다. 데이터를 추출하는 두 SELECT 쿼리는 여러 테이블에 수천 개의 행을 삽입하는 것과 같이 시간이 걸릴 것입니다. 이 시간을 줄이는 방법은 일반적인 쿼리 및 성능 최적화입니다.

사용자가 데이터의 복사본이 아니라 데이터의 라이브 하위 집합 만 필요로하는 조작이 가능하면 업데이트 가능한 것을 포함하여 VIEW를 사용하여 탐색 할 수 있습니다. 그러나 사본이 필요한 것처럼 들립니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.