【问题标题】:Mirror specific tables in postgreSQL镜像 postgreSQL 中的特定表
【发布时间】:2014-01-15 13:09:20
【问题描述】:

这个问题很简单,但我找不到任何文档:

如何将特定表从一个数据库镜像到另一个?

基本思想是拥有双数据库,它们之间只共享特定的表

任何建议将不胜感激!如果 PostgreSQL 做不到,还有其他 RDBMS 可以吗? 提前致谢!

编辑: 我想这样做的原因是使用 django 在两个数据库之间共享“任意”信息,而不会丢失正确的引用完整性。 例如:

假设我们有一个客户、产品和销售表。我们想 在两家公司之间共享我们的客户和产品基础,但不是我们的 销售量。这可以扩展到任何特定情况(股票 但不是客户、用户但不是权限等)。所以我认为 最简单的解决方案是在数据库之间共享特定的表。如果 有更好的解决问题的方法,请随时分享您的 经验!提前致谢

【问题讨论】:

  • 您可以使用 Slony(Postgres 的复制工具)来做到这一点
  • 最简单的解决方案是在同一个数据库中使用不同的模式。比双数据库容易得多。这个this question 等等。
  • 是的,看起来像,但是 django 还不支持模式
  • @Alvaro:您可以设置两个具有不同搜索路径的不同用户。所有常见的桌子都会去,例如进入公共模式,其他人进入他们自己的模式。由于搜索路径的原因,非公共架构中的表不需要以架构为前缀。每个用户看到一组不同的表。如果您将架构命名为用户名,您甚至不需要更改 search_path,因为这是默认设置
  • 好的!我会试一下!!感谢您给我一个起点,非常感谢(如果您愿意,请做出答案,我会接受)

标签: postgresql replication


【解决方案1】:

可能性很小:

  • 主/主复制(Bucardo),主/从复制(Slony)

  • 使用外部数据包装器 - 您可以从其他数据库访问任何表。 9.2提供舒适的FDW只读驱动,9.3包含读/写FDW驱动

创建扩展 postgres_fdw ; 创建服务器 omega FOREIGN DATA WRAPPER postgres_fdw 选项(主机'localhost',数据库名'other_database'); 为pavel SERVER omega创建用户映射; CREATE FOREIGN TABLE oo (a int) SERVER omega; postgres=# EXPLAIN ANALYZE VERBOSE SELECT * FROM oo WHERE a BETWEEN 1 and 100;

FDW 可能是最简单的数据共享解决方案。

【讨论】:

  • Bucardo 在我的用例中看起来很有趣,因为 django 唯一需要做的就是为查询使用不同的数据库
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多