复制
复制语句用于在单机和集群部署场景下实现高可用能力:
- 单机部署时,用户可通过配置主备角色,灵活管理主备复制服务的生命周期,包括启动、暂停、恢复和删除等操作。有关单机主备复制功能的更多信息,参见单机主备复制。
- 集群部署时,用户可通过启动/停止复制任务来管理数据同步,并基于复制状态监控实现主备切换和灾备恢复。有关集群复制功能的更多信息,参见集群复制。
注意
当前版本暂不支持在三权分立模式下使用复制功能
单机主备复制语句
REPLICATE SET PRIMARY
REPLICATE SET PRIMARY 语句用于为当前节点添加目标主库地址,或变更现有主库的 IP 地址。
执行语句的节点必须为普通节点或备库节点。如果节点为普通节点,添加主库地址后,系统将自动将其角色切换为备库。
所需权限
用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
语法格式

参数说明
| 参数 | 说明 |
|---|---|
primary_url | 主库 URL,格式为符合 JDBC 连接协议方式的字符串。支持安全和非安全模式。安全模式下需采用证书认证方式,证书对应地址应为备库证书地址并且要保证主备证书配置一致。 |
语法示例
REPLICATE SET PRIMARY 'postgresql://root@localhost:26267/defaultdb?sslmode=verify-ca&sslcert=./certs/client.root.crt&sslkey=./certs/client.root.key&sslrootcert=./certs/ca.crt';
REPLICATE SET ROLE
REPLICATE SET ROLE 语句用于切换节点角色,适用于主备切换、主库非计划性宕机等场景。
所需权限
用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
语法格式

语法示例
将当前节点角色切换为普通节点,支持读写操作。
REPLICATE SET ROLE DEFAULT;将当前节点角色切换为主库,支持读写操作。
REPLICATE SET ROLE PRIMARY;将当前节点角色切换为备库,仅支持读操作。
REPLICATE SET ROLE SECONDARY;
REPLICATE SET SERVICE
REPLICATE SET SERVICE 语句用于创建、启动、停止和删除主备复制服务:
- CREATE:创建主备复制服务,建立主备高可用关系。
- START:启动主备复制服务,适用于主备初始化或计划性停机后的恢复场景。
- STOP:停止主备复制服务,适用于计划性停机、主备切换等场景。停止复制后,主库会先进行历史数据复制,待主备数据达到一致后,返回操作成功提示。
- DROP:删除主备复制服务,停止数据同步并清除主备关系。
执行 CREATE、START 和 STOP 操作的节点必须为备库。 执行 DROP 操作的节点必须为普通节点。
所需权限
用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
语法格式

语法示例
创建主备复制服务。
REPLICATE SET SERVICE CREATE;启动主备复制。
REPLICATE SET SERVICE START;停止主备复制。
REPLICATE SET SERVICE STOP;删除主备复制。
REPLICATE SET SERVICE DROP;
集群复制语句
REPLICATE FROM
REPLICATE FROM 语句用于在集群间启动数据复制任务,支持表级别和库级别的数据复制。
所需权限
用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
语法格式

参数说明
| 参数 | 说明 |
|---|---|
database_name | 要复制的库名。注意:库内无表的情况下,不支持开启库级复制,需要先进行库内表创建后才能开启库级复制。 |
table_name | 要复制的表名,格式为 database_name.schema_name.table_name。未指定数据库和模式时,表示复制当前数据库默认模式下的表 |
source_url | 主库集群地址,格式为 PostgreSQL 连接字符串。建议配置为 HAProxy 地址而非直连节点 IP,以便在主库节点故障时自动切换 支持安全和非安全两种模式: - 非安全模式: postgresql://user@host:port?sslmode=disable- 安全模式(用户名密码认证): postgresql://user:password@host:port,需要在主库和备库创建同名用户及密码- 安全模式(证书认证): postgresql://user@host:port/database?sslmode=verify-ca&sslcert=<cert_path>&sslkey=<key_path>&sslrootcert=<ca_path>,需要主备库共享证书 |
options | 复制选项,支持以下参数组合: - init:仅复制表结构和未来新增数据- data:备库已有表结构,仅复制数据(包括历史数据和未来新增数据)- init, data:备库为空,需要完整复制表结构和数据- data, lastTime(<timestamp>):备库已有表结构,仅复制指定时间点后的历史数据和未来新增数据- init, data, lastTime(<timestamp>):复制表结构以及指定时间点后的历史数据和未来新增数据 |
返回字段说明
| 字段 | 说明 |
|---|---|
replication_producer_id | 主库复制任务 ID,用于在主库管理复制任务 |
replication_consumer_id | 备库复制任务 ID,用于在备库管理复制任务 |
start_time | 用户指定的数据复制起始时间点,未指定时返回 0 |
语法示例
非安全模式下,复制库结构和未来增量数据
REPLICATE DATABASE e1primary FROM 'postgresql://root@192.168.111.128:26260?sslmode=disable' WITH init;证书认证安全模式下,复制库结构和所有数据
REPLICATE DATABASE e1primary FROM 'postgresql://root@localhost:26267/defaultdb?sslmode=verify-ca&sslcert=./certs/client.root.crt&sslkey=./certs/client.root.key&sslrootcert=./certs/ca.crt' WITH init, data;非安全模式下,备库表已存在,仅复制数据
REPLICATE TABLE defaultdb.public.t1 FROM 'postgresql://root@192.168.111.128:26257?sslmode=disable' WITH data;非安全模式下,复制表结构和指定时间点后的数据
REPLICATE TABLE defaultdb.public.t3 FROM 'postgresql://root@192.168.111.128:26257?sslmode=disable' WITH init, data, lastTime('2025-09-18 03:36:19.665970998+00:00');
REPLICATE STOP
REPLICATE STOP 语句用于优雅地停止集群间的数据复制任务。在指定的超时时间内,如果主库无新数据写入,系统将停止复制并返回最后一次检查点时间。
提示
如需强制终止复制任务,可使用 CANCEL JOB 语句,但强制终止不保证主库和备库数据一致性,建议仅在紧急情况下使用。
所需权限
用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
语法格式

参数说明
| 参数 | 说明 |
|---|---|
replication_consumer_id | 启动复制时返回的备库任务 ID |
duration | 超时时间,在指定时间内无新数据写入后停止复制 |
返回字段说明
| 字段 | 说明 |
|---|---|
replication_consumer_id | 备库任务 ID |
last_checkpoint | 最后一次检查点时间,该时间点之前的数据已全部复制完成。注意:因数据入库存在延迟,备库中可能存在入库时间晚于该时间点的数据,因此在备库执行时间点早于 last_checkpoint 的操作时可能因冲突而失败 |
status | 复制状态 |
语法示例
REPLICATE STOP 845690899499384833 WITH TIMEOUT 100ms;