N 개의 기계가 각각 하나의 포스트그레스 데이터베이스를 가지고 있고, 동일한 스키마와 의미의 테이블 A를 가지고있는 상황을 고려해보십시오. 성능상의 이유로이 아키텍처를 고수해야하지만 모든 데이터를 통합하여 각 데이터베이스를 새로 고치는 것은 다소 힘든 일입니다.All-To-All Union of Postgres 데이터베이스 테이블을 만드는 가장 쉬운 방법은?
나는이 문제를 자동화 할 수있었습니다 정도는 쉘 스크립트가하고 있습니다 :
mycopy=tableA_`hostname`.pg
pg_dump -t tableA -d $database | sed "s/tableA/$mycopy" > $mycopy
for host in host_x host_y host_z; do
scp $mycopy host:~/
done
다음 SQL 스크립트를
BEGIN;
\i tableA_hostx.pg
\i tableA_hosty.pg
\i tableA_hostz.pg
CREATE TABLE new_tableA AS
(select * from tableA)
UNION DISTINCT (select * from tableA_hostx)
UNION DISTINCT (select * from tableA_hosty)
UNION DISTINCT (select * from tableA_hostz);
DROP TABLE tableA;
DROP TABLE table_hostx;
DROP TABLE table_hosty;
DROP TABLE table_hostz;
ALTER TABLE new_tableA rename to tableA;
COMMIT;
하지만이를 매우 잘 정의 및 일반 내가하고있는 것 같아서, 이런 모든 것 - 투 - 모든 커뮤니케이션을위한 고급 고급 인터페이스가 있는지 궁금해. the postgres wiki에 설명 된 일부 분산 데이터베이스 접근 방식이 있지만 그 중 어떤 것도 정확하게 수행 할 수 있습니까? 그렇지 않으면 내 데이터베이스에 대해 많이 재고하거나 재 설계하지 않아도됩니까?
흠, N 호스트 각각에서 pg_basebackup (N-1) 번 실행해야 할 것 같습니다. pg_dump + scp 접근법보다 어떤 이점이 있는지 확실하지 않습니다. 내 SQL 스크립트에서하고있는 것처럼 각 테이블을 UNION DISTINCT와 자동으로 병합합니까? 또한, 다른 테이블 (테이블 A)을 병합하고 싶지 않습니다. – seewalker
어떤 postgresql 버전을 사용하고 있습니까? – harmic