pgl_ddl_deploy搭建及使用方法

什么是pgl_ddl_deploy?
pgl_ddl_deploy是pglogical逻辑复制的扩展插件,解决了pglogical不能同步DDL语句的问题。
安装步骤
此插件需要postgres版本9.5+和pglogical插件搭建完毕。
源码下载网址:https://github.com/enova/pgl_ddl_deploy
从源代码构建:
make
make install
make installcheck # run regression suite

此插件需要安装pglogical后才能在数据库中创建。
CREATE EXTENSION pgl_ddl_deploy;
此插件在主节点和所有订阅节点上均需要安装。
部署步骤
DDL复制是依据 pglogical.replication_set,在每个复制集的基础上进行配置的。
将节点信息添加到pgl_ddl_deploy.set_configs以便为特定复制集配置(但尚未部署)DDL复制。例如
-只显示一些选项。请参阅下面的所有选项
-这种类型的配置将DDL复制所有用户模式,并自动添加
-新的匹配模式/表复制:

INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_schema_regex)
VALUES (‘default’, ‘.*’);

  • 这种类型的配置将只维护特定的一组表
  • 在任何“ALTER TABLE”语句的给定复制集中:
    INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_only_repset_tables)
    VALUES (‘my_special_tables’, TRUE);
    相关设置:
    • set_name:pglogical replication_set名称
    • include_schema_regex:在DDL复制中包含模式的正则表达式。这可以用于自动将新表添加到复制。此选项与include_only_repset_tables不兼容。
    • lock_safe_deployment:如果为true,则DD语句L将lock_timeout在用户的低循环中执行
    • allow_multi_statements:如果为true,则客户端发送的多个SQL语句可以在特定条件下进行同步。如果为false,则只有单个SQL语句进行逻辑复制。
    • include_only_repset_tables:如果为true,则只有复制中的表将由DDL复制维护。因此ALTER TABLE 这里只允许声明。此选项与include_schema_regex不兼容 。
    • queue_subscriber_failures:如果为true,则允许DDL在订阅节点同步失败后重新进行同步,并使用函数排队等待重试 pgl_ddl_deploy.retry_all_subscriber_logs()。例如,如果要复制视图(VIEW)DDL但不希望失败终止数据复制,此项参数将起作用。不推荐您使用此与任何TABLE复制,因为这些事件可能终止数据复制。
    • create_tags:创建事件触发器将触发的一组命令标签。谨慎修改。这些都是默认为下面相应的默认设置include_schema_regex或include_only_repset_tables。
    • drop_tags:放置事件触发器将触发的一组命令标签。谨慎修改。这些都是默认为下面相应的默认设置include_schema_regex或include_only_repset_tables。

    经测试后。支持的DDL语句:
    ALTER FUNCTION、ALTER SEQUENCE、ALTER TABLE、ALTER TYPE、ALTER VIEW、CREATE FUNCTION、CREATE SCHEMA、CREATE SEQUENCE、CREATE TABLE、CREATE TABLE AS、CREATE TYPE、CREATE VIEW、DROP FUNCTION、DROP SCHEMA、DROP SEQUENCE、DROP TABLE、DROP TYPE、DROP VIEW、SELECT INTO
    触发器相关语句虽不支持,但是触发器触发的sql语句可以正常进行同步。
    目前不支持的语句:
    CREATE TRIGGER、ALTER TRIGGER、DROP TRIGGER、CREATE TABLE AS SELECT、DROP TABLE A,B,C(一次删除多表)

查看当前同步配置语句
SELECT sc.set_name, n.nspname FROM pg_namespace n INNER JOIN pgl_ddl_deploy.set_configs sc ON nspname !~* pgl_ddl_deploy.exclude_regex() AND n.nspname ~* sc.include_schema_regex ORDER BY sc.set_name, n.nspname;

文章浏览总量 1,118 次

评论 (1)

  • 张 连壮| 2019年4月10日

    good 这下复制相关的主体功能就全了

  • 要发表评论,您必须先登录