在Postgresql中使用外键进行表复制

时间:2015-07-06 12:06:52

标签: database postgresql replication database-replication

我有两个表A和B,A在Postgresql数据库中有B的外键。我想将表A复制到另一个数据库而不复制表B,因为这需要花费太多时间而且没有必要;表A仅引用了表B的一小部分。  是否有任何复制系统可以复制表A,只有表B(引用表)的行被引用?

1 个答案:

答案 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。与提供每表格粒度SlonyBuccardo一样。