MaterializedPostgreSQL
建议 ClickHouse Cloud 用户使用 ClickPipes 将 PostgreSQL 复制到 ClickHouse。这原生支持 PostgreSQL 的高性能变更数据捕获 (CDC)。
创建 ClickHouse 表,其中包含 PostgreSQL 表的初始数据转储,并启动复制过程,即执行后台作业以应用远程 PostgreSQL 数据库中 PostgreSQL 表上发生的新更改。
此表引擎是实验性的。要使用它,请在您的配置文件中或使用 SET
命令将 allow_experimental_materialized_postgresql_table
设置为 1
SET allow_experimental_materialized_postgresql_table=1
如果需要多个表,则强烈建议使用 MaterializedPostgreSQL 数据库引擎而不是表引擎,并使用 materialized_postgresql_tables_list
设置,该设置指定要复制的表(也可以添加数据库 schema
)。就 CPU、更少的连接和远程 PostgreSQL 数据库内部更少的复制槽而言,这将更好。
创建表
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_table', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
引擎参数
host:port
— PostgreSQL 服务器地址。database
— 远程数据库名称。table
— 远程表名称。user
— PostgreSQL 用户。password
— 用户密码。
要求
-
wal_level 设置的值必须为
logical
,并且max_replication_slots
参数在 PostgreSQL 配置文件中的值必须至少为2
。 -
带有
MaterializedPostgreSQL
引擎的表必须具有主键 — 与 PostgreSQL 表的副本标识索引(默认值:主键)相同(请参阅 关于副本标识索引的详细信息)。 -
仅允许数据库 Atomic。
-
MaterializedPostgreSQL
表引擎仅适用于 PostgreSQL 版本 >= 11,因为该实现需要 pg_replication_slot_advance PostgreSQL 函数。
虚拟列
创建表时无需添加这些列。它们始终可以在 SELECT
查询中访问。 _version
列等于 WAL
中的 LSN
位置,因此可以用于检查复制的最新程度。
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
PRIMARY KEY key;
SELECT key, value, _version FROM postgresql_db.postgresql_replica;
不支持复制 TOAST 值。将使用数据类型的默认值。