【问题标题】:Stop BDR from replicating DROP TABLE or CREATE TABLE阻止 BDR 复制 DROP TABLE 或 CREATE TABLE
【发布时间】:2017-04-06 09:30:43
【问题描述】:

我有两个数据库,其中包含要同步的表。我不想同步任何其他表。我正在使用 Postgres-BDR 来做到这一点。

这些表是复制集 common 的一部分。在某些情况下,其他表在节点之间共享名称(但不在common 中),并且节点将调用DROP TABLE,然后调用CREATE TABLE。即使这些表不属于common 复制集,这些命令仍会复制到其他节点,导致其他节点丢失其表中的所有数据,然后创建一个空表。

我怎样才能阻止这种情况?我只希望将影响common 的命令复制到其他节点。

【问题讨论】:

    标签: postgresql database-replication multi-master-replication postgresql-bdr


    【解决方案1】:

    没关系,我找到了。可通过bdr.skip_ddl_replication 获得。

    我只是将bdr.skip_ddl_replication = on 放入postgresql.conf,重新启动服务器,然后BOOM!像魅力一样工作。

    编辑

    我谨慎地指出,文档警告说,如果使用不当,此选项可能会破坏数据库复制。但由于我会非常严格地控制表模式,因此不会造成任何问题。

    【讨论】:

    • BOOM! 是对的。使用时要格外小心,否则会发生繁荣。如果您想提交使表创建/删除/更改复制集知道的补丁,我们会考虑接受。到目前为止,这还不是优先事项。
    • 类似的东西会很棒,但不幸的是我不够精明,无法自己编写。我只知道有用/危险。希望我能在这个项目中避免后者。
    • 显然,此选项不打算经常使用。所以要么我的用例是不规则的,要么我只是以错误的方式去做。我正在尝试跨电子商务 Web 应用程序的不同实例同步用户相关信息。在维护时间之外,同步表绝对不会像这样被更改,但非同步表可以。在这些情况下,更改影响其他实例的表结构会很糟糕。如果您不介意我选择您的大脑@CraigRinger,这是使用 BDR 的不规则方式,还是我只需要重新考虑一下?
    • 我认为 pglogical 会更适合这个。
    • 无论您使用 pglogical 还是 BDR,您都需要确保配置了复制集,这样您就不会尝试同步另一端不存在的表的内容。
    猜你喜欢
    • 2020-06-30
    • 2011-01-26
    • 2013-06-29
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多