TimescaleDB 是由 Timescale Inc 开发的开源 Postgres 扩展,
旨在提升分析查询性能,同时无需离开 Postgres。为此,它会创建由该扩展管理的 “hypertable”,并支持自动分区为 “chunks”。
hypertable 还支持透明压缩和混合行列式存储 (称为 “hypercore”) ,不过这些
功能需要使用采用专有许可的扩展版本。
Timescale Inc 还为 TimescaleDB 提供两种托管服务:
Managed Service for Timescale
Timescale Cloud.
此外,也有第三方厂商提供支持使用 TimescaleDB 扩展的托管服务,但由于
许可限制,这些厂商仅支持该扩展的开源版本。
Timescale hypertable 在多个方面的行为都不同于普通的 Postgres 表。这给复制它们的过程带来了一些复杂性,
因此,复制 Timescale hypertable 的能力应视为
尽力而为。
ClickPipes 支持 Postgres 12 及以上版本。
具体需要执行哪些步骤,取决于您的 TimescaleDB Postgres 实例是如何部署的。
- 如果您使用的是托管服务,且您的提供商已列在侧边栏中,请按照该提供商对应的指南操作。
- 如果您是自行部署 TimescaleDB,请按照通用指南操作。
对于其他托管服务,如果尚未启用逻辑复制,请向您的提供商提交支持工单,请其协助启用。
Timescale Cloud 不支持启用逻辑复制,而 Postgres 管道在 CDC 模式下需要此功能。
因此,Timescale Cloud 用户只能通过
Postgres ClickPipe 对其数据执行一次性加载 (Initial Load Only) 。
Timescale hypertable 本身不会存储插入其中的数据。相反,数据会存储在多个对应的 “chunk” 表中,这些表位于 _timescaledb_internal schema 下。对于在 hypertable 上执行查询,这并不是问题。但在逻辑复制期间,我们检测到的不是 hypertable 中的变更,而是 chunk 表中的变更。Postgres ClickPipe 内置了自动将 chunk 表中的变更重新映射到父 hypertable 的逻辑,但这需要额外的配置步骤。
如果你只想对数据执行一次性加载 (Initial Load Only) ,请跳过第 2 步及后续步骤。
-
为 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;
-
以 Postgres superuser/admin 身份,使用你想要复制的 hypertable 创建一个 publication。该 publication 还必须包含整个
_timescaledb_internal schema,这样管道才能接收底层 chunk 表的变更。我们强烈建议仅在 publication 中包含所需的表,以避免额外的性能开销。
publication 中包含的任何表都必须定义主键,或者将其副本标识配置为 FULL。有关如何确定 publication 范围的指导,请参阅 Postgres FAQs。
-- 向 ClickPipe 添加新表时,您还需要手动将其添加到 publication 中。
CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2, TABLES IN SCHEMA _timescaledb_internal;
clickpipes publication 将包含从指定表生成的一组变更事件,后续会用于摄取复制流。
某些托管服务不会向其管理员用户授予为整个 schema 创建 publication 所需的权限。如果遇到这种情况,请向你的提供商提交支持工单。或者,你也可以跳过这一步 (以及后续步骤) ,改为对数据执行一次性加载。
完成这些步骤后,你应该就可以继续创建 ClickPipe了。
如果你想限制对 Timescale 实例的流量访问,请将文档中列出的静态 NAT IP 地址加入允许列表。
具体操作因提供商而异;如果侧边栏中列出了你的提供商,请参考相应说明,或向他们提交
工单。