pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
逻辑复制目前有以下限制或缺失的功能。这些问题可能会在未来版本中得到解决。
数据库模式和 DDL 命令不会被复制。初始模式可以手工使用 pg_dump --schema-only 复制。之后的模式更改需要手工保持同步。(不过请注意,两端的模式其实不需要绝对一致。)当活动数据库中的模式定义发生变化时,逻辑复制仍然能够稳健运行:如果发布端修改了模式,而复制数据开始到达订阅端时与表模式不匹配,复制就会报错,直到模式被更新。在很多情况下,可以通过先在订阅端应用仅添加内容的模式变更来避免间歇性错误。
序列数据不会被复制。由序列支撑的 serial 或标识列中的数据当然会作为表的一部分被复制,但序列本身在订阅端仍会显示起始值。如果订阅端被当作只读数据库使用,这通常不是问题。但如果计划把订阅端数据库用作某种切换或故障切换目标,那么就需要把序列更新到最新值,可以从发布端复制当前数据(例如使用 pg_dump),也可以直接从表本身确定一个足够高的值。
TRUNCATE 命令不会被复制。当然,可以改用 DELETE 来绕过这一限制。为避免意外调用 TRUNCATE,可以撤销表上的 TRUNCATE 权限。
大对象(见第 34 章)不会被复制。除了把数据存储在普通表中,没有其他变通办法。
只能从基表复制到基表。也就是说,发布端和订阅端的表必须都是普通表,不能是视图、物化视图、分区根表或外部表。因此,对于分区,可以一对一复制分区层次结构,但目前还不能复制到采用不同分区方式的目标。尝试复制基表以外的表会导致错误。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。