我有两个表A和B,A在Postgresql数据库中有B的外键。我想将表A复制到另一个数据库而不复制表B,因为这需要花费太多时间而且没有必要;表A仅引用了表B的一小部分。 是否有任何复制系统可以复制表A,只有表B(引用表)的行被引用?
答案 0 :(得分:0)
如果只是两个(或几个)表格,我会在主数据库的VIEW
上创建B
:
CREATE VIEW b_for_a
SELECT * -- or list columns explicitly, depends on your plans
FROM b
WHERE EXISTS (SELECT 1 FROM a WHERE a.b_id = b.b_id);
与dblink同步(在奴隶侧执行)。代码示例:
还要考虑:
或在Postgres 9.3 + 中使用foreign tables使用postgres_fdw
。
剩下的大问题是如何以及何时触发同步。如果您的应用程序不是时间关键,您可以在适当的时间安排cron作业。如果你的表很小,你可以简单地截断并复制整个表。如果需要更频繁地复制更改,或者如果表变大或者无法自由锁定目标表,则会变得更加复杂。触发器,LISTEN
/ NOTIFY
甚至dblink_get_notify()
,...
手工编织解决方案需要比established replication systems更多的工作和注意细节。如果事情变得复杂,那就考虑一下established replication systems。与提供每表格粒度的Slony或Buccardo一样。