考虑一下N台机器每个都有一个postgres数据库的情况,它有一个具有相同模式和含义的表A.出于性能方面的考虑,我确实需要坚持这种架构,但是通过整合所有集体数据来刷新每个数据库是一种痛苦。最简单的方法来做所有的Postgres数据库表的所有联合?
我已经能够自动完成这个程度是一个shell脚本做:
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方法有什么好处。它会自动合并每个表与UNION DISTINCT,就像我在我的SQL脚本中做的那样?另外,我不想合并我的其他表,只是表A. – seewalker
您使用的是什么postgresql版本? – harmic