PostgreSQL - 定期从一个数据库复制数据到另一个数据库

4
我正在尝试建立一个包含两个数据库的架构,称为预览生产,它们具有完全相同的模式。使用情况是可以对预览数据库进行编辑,然后在审核和批准后将其推送到生产数据库。生产应用程序将从生产数据库中读取。
最合适的方式是什么,可以将预览数据库中的所有数据推送到生产数据库,而不会使生产数据库停机?理想情况下,从预览到生产的复制将是原子事务。
我已经在MSSQL中使用过这种类型的设置,但我对Postgres还比较新。因此,我愿意听取其他架构方法(例如使用模式)的建议。 编辑:使用单独的数据库的主要原因是我可能需要多个目标数据库(不仅仅是单个“生产”数据库)。我还可能需要在不更改源数据库模式的情况下随时切换目标数据库。

1
为什么要使用两个数据库?在单个数据库上进行操作非常容易和高效。 - Patrick
在PG中,您可以通过将所有语句包装在单个事务中 - MVCC模型来使操作“原子化”(从其他用户的角度来看)。 - Patrick
使用不同的数据库有许多原因 - 预览和实时数据库可能具有不同的网络和安全要求(防火墙等),或者需要托管在不同的机器上。另一个原因是,这种架构可以轻松地允许多个目标(不仅仅是实时目标),而无需添加额外的表格。 - Joel
唯一使用不同数据库的理由是更简单的模式。否则就没有意义了。 - Clodoaldo Neto
更简单的架构和能够在不改变源数据库架构的情况下添加或更改目标是我考虑使用单独的数据库的主要原因。但如果有其他允许这种灵活性的替代方案,我也很乐意听取建议。我编辑了问题以添加此要求。 - Joel
1个回答

0
我认为你要找的是“热备”。这将是一个单独的 Postgresql 实例,可能在同一台服务器上,但通常不是,在主服务器的近实时复制。
大体上,这是通过将二进制事务日志从主服务器传输到备份服务器,然后在那里“重播”来完成的。传输日志的确切机制可能因您的要求而异。
幸运的是,这方面的文档非常好:

https://www.postgresql.org/docs/9.3/static/warm-standby.html

https://www.postgresql.org/docs/9.0/static/hot-standby.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接