如果你使用的是受支持的提供商之一 (参见侧边栏) ,请查阅该提供商对应的专用指南。
ClickPipes 支持 Postgres 12 及以上版本。
-
要在 Postgres 实例上启用复制,需要确保已设置以下参数:
要检查该参数,可以运行以下 SQL 命令:
输出应为
logical。如果不是,请运行:
ALTER SYSTEM SET wal_level = logical;
-
此外,建议在 Postgres 实例上设置以下参数:
max_wal_senders > 1
max_replication_slots >= 4
要检查这些参数,可以运行以下 SQL 命令:
SHOW max_wal_senders;
SHOW max_replication_slots;
如果这些值不符合建议值,可以运行以下 SQL 命令进行设置:
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
-
如果你已按上述说明修改了配置,则必须重启 Postgres 实例,更改才会生效。
以管理员用户身份连接到你的 Postgres 实例,并执行以下命令:
-
为 ClickPipes 创建一个专用用户:
CREATE USER clickpipes_user PASSWORD 'some-password';
-
向上一步创建的用户授予 schema 级只读访问权限。以下示例展示了
public schema 的权限。对于每个包含你想要复制的表的 schema,都需要重复执行这些命令:
GRANT USAGE ON SCHEMA "public" TO clickpipes_user;
GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user;
-
向该用户授予复制特权:
ALTER USER clickpipes_user WITH REPLICATION;
-
使用你想要复制的表创建一个 publication。我们强烈建议只在 publication 中包含实际需要的表,以避免额外的性能开销。
publication 中包含的任何表都必须已定义 主键,_或_将其 副本标识 配置为 FULL。有关范围界定的指导,请参阅 Postgres FAQ。
-
为特定表创建 publication:
CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2;
-
为特定 schema 中的所有表创建 publication:
CREATE PUBLICATION clickpipes FOR TABLES IN SCHEMA "public";
clickpipes publication 将包含从指定表生成的一组变更事件,后续会用于摄取复制 stream。
在 pg_hba.conf 中为 ClickPipes 用户启用连接
如果你是自行托管,则需要按照以下步骤允许 ClickPipes IP addresses 连接到 ClickPipes 用户。如果你使用的是托管服务,也可以按照提供商的文档完成相同操作。
-
对
pg_hba.conf 文件进行必要修改,以允许 ClickPipes IP addresses 连接到 ClickPipes 用户。pg_hba.conf 文件中的示例条目如下所示:
host all clickpipes_user 0.0.0.0/0 scram-sha-256
-
重新加载 PostgreSQL 实例,使更改生效:
增加 max_slot_wal_keep_size
这是一个推荐的配置更改,可确保大型事务/commit 不会导致 replication slot 被删除。
你可以通过更新 postgresql.conf 文件,将 PostgreSQL 实例的 max_slot_wal_keep_size 参数调高到更大的值 (至少 100GB 或 102400) 。
max_slot_wal_keep_size = 102400
您可以重新加载 Postgres 实例,以使更改生效:
如需就该值获得更合适的建议,可联系 ClickPipes 团队。
您现在可以创建您的 ClickPipe,并开始将 Postgres 实例中的数据摄取到 ClickHouse Cloud。
请务必记下您在设置 Postgres 实例时使用的连接信息,因为在创建 ClickPipe 的过程中需要用到这些信息。