N台のマシンがそれぞれ1つのpostgresデータベースを持ち、同じスキーマと意味のテーブル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に記載されているいくつかの分散データベースのアプローチがありますが、いずれも正確にこれを行うことができますし、そうでなければ私のデータベースについて多くのことを再考したり、
on-an-ubuntu-12-04-vps)? –
ええと、N個のホストのそれぞれでpg_basebackup(N-1)回実行する必要があるようですね。私は、pg_dump + scpアプローチに比べてどんな利点があるのかよくわかりません。私はSQLスクリプトでやっているように、自動的に各テーブルをUNION DISTINCTにマージしますか?また、私は他のテーブル(テーブルA)をマージしたくありません。 – seewalker
あなたはどのpostgresqlバージョンを使用していますか? – harmic