您可以通过一键建仓功能将RDS PostgreSQL实例中的数据同步至AnalyticDB PostgreSQL版中。
功能介绍
AnalyticDB PostgreSQL版提供了一键建仓功能,支持将RDS PostgreSQL实例中的数据同步到AnalyticDB PostgreSQL版中。您只需要在RDS PostgreSQL侧创建发布(PUBLICATION),在AnalyticDB PostgreSQL版侧创建一键建仓任务订阅该发布即可将数据从RDS PostgreSQL实例实时同步到AnalyticDB PostgreSQL版。
注意事项
- 仅AnalyticDB PostgreSQL版存储弹性模式实例且内核版本为V6.3.8.0及以上,才支持一键建仓功能。
- 一键建仓仅支持数据库类型为PostgreSQL 10.0以上版本的RDS PostgreSQL实例。
- RDS PostgreSQL实例与AnalyticDB PostgreSQL版实例需要属于同一VPC。
- 同步对象为数据表。
- 仅支持同步INSERT、UPDATE、DELETE、TRUNCATE四种语法,不支持同步表结构变更。
- 目标表与待同步的源表的表结构必须完全一致。
- RDS PostgreSQL中待同步的源表必须具备主键。
- 仅支持同步以下数据类型:
数值类型、字符类型、布尔类型、时间日期类型、枚举类型、GEO类型、INTERNET类型、RANGE类型、JSON类型、BYTEA类型、BIT类型以及以上类型的数组类型。
说明 其他数据类型可能会导致一键建仓任务中断。 - RDS PostgreSQL实例中的源表如果使用类似
UPDATE/DELETE WHERE CTID = ******
的语句更新了数据,将不会同步至AnalyticDB PostgreSQL版的目标表中。
准备工作
- AnalyticDB PostgreSQL版
- RDS PostgreSQL
- 已创建RDS PostgreSQL实例,创建方法,请参见创建RDS PostgreSQL实例。
- 已创建高权限账号,创建账号,请参见创建账号。
- 已将配置参数wal_level设置为logical,修改配置参数,请参见设置实例参数。
说明 该参数修改后需重启实例才能生效,建议您在业务低谷期进行重启操作。
- 已将AnalyticDB PostgreSQL版实例的内网地址加入RDS PostgreSQL实例的白名单。
SQL语法
以下内容将为您介绍创建、修改、删除一键建仓任务的SQL语法。
创建一键建仓任务
语法
CREATE SUBSCRIPTION subscription_name
CONNECTION 'conninfo'
PUBLICATION publication_name [, ...]
[ WITH ( subscription_parameter [= value] [, ... ] ) ]
参数说明如下:
参数 | 说明 |
---|---|
subscription_name | 一键建仓任务的名称。 |
conninof | RDS PostgreSQL实例的连接信息,由连接地址、端口号、数据库名称、账号和密码组成。连接信息的获取方法如下:
示例如下: |
publication_name | RDS PostgreSQL实例上发布的名称。 |
subscription_parameter | 一键建仓任务的可选参数,当前仅支持copy_data (boolean)参数。
copy_data (boolean):一键建仓任务建立时,是否将源表中已有的数据同步到目标表中。取值如下:
|
修改一键建仓任务
- 刷新一键建仓任务的同步对象
当RDS PostgreSQL实例往发布中添加了新的源表时,必须执行REFRESH操作才能让目标表订阅到新增源表的数据。
语法
ALTER SUBSCRIPTION subscription_name REFRESH PUBLICATION [ WITH ( refresh_option [= value] [, ... ] ) ]
参数说明如下:
参数 说明 subscription_name 一键建仓任务的名称。 refresh_option 一键建仓任务的可选参数,当前仅支持copy_data (boolean)参数。 copy_data (boolean):一键建仓任务建立时,是否将源表中已有的数据同步到目标表中。取值如下:
- true:同步源表中已有数据。
- false:不同步源表中已有数据。
- 启动已停止的一键建仓任务
语法
ALTER SUBSCRIPTION subscription_name ENABLE
参数说明如下:
参数 说明 subscription_name 一键建仓任务的名称。 - 停止当前一键建仓任务
语法
ALTER SUBSCRIPTION subscription_name DISABLE
参数说明如下:
参数 说明 subscription_name 一键建仓任务的名称。 - 修改一键建仓任务所属的用户
语法
ALTER SUBSCRIPTION subscription_name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
参数说明如下:
参数 说明 subscription_name 一键建仓任务的名称。 new_owner 一键建仓任务的所属的新用户。 - 修改一键建仓任务的名称
语法
ALTER SUBSCRIPTION subscription_name RENAME TO new_name
参数说明如下:
参数 说明 subscription_name 一键建仓任务的名称。 new_name 一键建仓任务的新名称。
删除一键建仓任务
语法
DROP SUBSCRIPTION [ IF EXISTS ] subscription_name
参数说明如下:
参数 | 说明 |
---|---|
subscription_name | 需要删除的一键建仓任务名称。 |
更多语法的使用说明,请参见PostgreSQL官方文档。
开始数据同步
RDS PostgreSQL实例上的表logical_tb1需要同步到AnalyticDB PostgreSQL版实例。
修改同步表
AnalyticDB PostgreSQL版实例已创建一键建仓任务sub1来同步RDS PostgreSQL实例发布pub1中的表logical_tb1,现在需要同步另一张表logical_tb2到AnalyticDB PostgreSQL版实例。
停止数据同步
RDS PostgreSQL实例上已创建发布pub1,发布中包含logical_tb1和logical_tb2两张表,表logical_tb1继续同步,表logical_tb2不再同步。
查询一键建仓任务状态
查询一键建仓任务是否完成
您可以在RDS PostgreSQL实例上执行以下语句查询一键建仓任务是否完成:
SELECT confirmed_flush_lsn = pg_current_wal_lsn() FROM pg_replication_slots WHERE slot_name = '<subscription_name>';
subscription_name为您需要查询的一键建仓任务名称。
返回结果说明如下:
- 如果返回结果为t,表示一键建仓任务已完成。
- 如果返回结果为f,表示一键建仓任务未完成。
- 如果返回结果为空,表示一键建仓任务不存在或状态异常。
查询当前一键建仓任务状态
您可以在RDS PostgreSQL实例上执行以下语句查询一键建仓任务状态:
SELECT active FROM pg_replication_slots WHERE slot_name='<subscription_name>';
subscription_name为您需要查询的一键建仓任务名称。
返回结果说明如下:
- 如果返回结果为t,表示一键建仓任务状态正常。
- 如果返回结果为f,表示一键建仓任务状态异常。
- 如果返回结果为空,表示一键建仓任务不存在。
查询AnalyticDB PostgreSQL版实例中一键建仓任务数量
您可以在AnalyticDB PostgreSQL版上执行以下语句查看当前实例中存在多少个一键建仓任务:
SELECT count(*) FROM pg_subscription WHERE subenabled = true;