是的,它已经准备好并且被广泛使用. Heroku粉丝基于Postgresql的内置异步复制,例如AWS RDS备用和读取副本.流式复制几乎普遍用于Postgresql.
复制的设置并不完全可爱,但像repmgr这样的工具在某种程度上有所帮助,而且随着每个主要版本的推移它都在慢慢改进. pg_basebackup使用流复制(并从另一个备用数据库执行此操作)获取系统副本的能力是一个很大的帮助.
通常,只有在生产就绪之前,才会在Postgresql中发布一个功能.与任何软件一样,错误也会发生,但它们通常会在识别后立即修复.真正重要的新功能有时会在.0发布后发现错误和问题,但如果是这样,修复它们是一个高优先级;虫子不只是留在身边.
我不知道流式复制的任何严重问题 – 同步或异步 – 我也没有看到任何报道很长一段时间.它们在引入的主要版本的.0版本中不如Pg通常的标准稳定,但它们都很快成熟并且完全可以投入生产.
(更新:在9.3.4之前的新9.3版本中存在特定错误,在某些情况下确实导致复制问题; 9.3的用户应立即更新到9.3.4.旧版本不受影响.)
我要提到的唯一警告是一个带有同步复制的小细节:如果你在master上提交,然后在等待副本确认时提交后取消查询,它甚至在复制之前就被视为在master上提交了.通过在等待副本回复时重新启动主服务器,可以获得相同的效果.在实践中,这是无关紧要的,但这是我能想到的唯一问题.
与MysqL比较?
Pg的本机复制与MysqL完全不同.
MysqL使用逻辑复制,它发送对表数据,表结构等的逻辑更改,并且副本应用这些更改.
Postgresql的复制级别较低(9.5及以下版本;未来版本也可能添加逻辑复制).它发送表中更改的块.它更简单,更容易正确,并且在副本服务器上施加更低的负载,但是消耗更多的网络带宽并且需要主机上更多的存储来保存尚未复制的更改.它最好配置为使用带有WAL归档后备的流复制,使其配置比MysqL更复杂.它复制了低级更改,如VACUUM活动,而不仅仅是元组更改,使副本的磁盘状态与主服务器的磁盘状态保持一致.它无法仅复制一个数据库;整个系统必须被复制,如果你有一个大的,高流失和不重要的数据库和一个小的,低流失和重要的数据库,这可能会令人沮丧.
总而言之,这取决于你想用它做什么.
我认为Postgresql的复制对于用于备份,高可用性和灾难恢复的副本来说要好得多.特别是与point in time recovery (PITR)结合使用时.
另一方面,它对于只读报告副本来说并不好,因为在运行长事务时需要延迟复制数据的应用意味着您需要让它取消长时间运行的查询或者大大落后于主服务器,消耗主机上的磁盘空间更多,并迫使它更加努力地跟上.
正在进行的工作到enable logical replication in PostgreSQL,其中复制了表结构,表内容等的逻辑更改,而不是它们的磁盘状态. Pg的目录设计和对用户定义的一切的支持使得这非常复杂.已经为9.4设置了一些基础工作,但是在9.6或更高版本之前,完全逻辑复制不太可能可用.