DataWorks现在实时同步能启动,但是不能同数据,我查了下错误原因,不晓得这个是啥子意思?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
数据同步前准备:PostgreSQL环境准备https://help.aliyun.com/zh/dataworks/user-guide/postgresql-data-source?spm=a2c4g.11186623.0.i61
在DataWorks上进行数据同步前,您需要参考本文提前在PostgreSQL侧进行数据同步环境准备,以便在DataWorks上进行PostgreSQL数据同步任务配置与执行时服务正常。以下为您介绍PostgreSQL同步前的相关环境准备。
准备工作1:创建账号并配置账号权限
您需要规划一个数据库的登录账号用于后续执行操作,此账号需要拥有数据库的REPLICATION、 LOGIN权限。
说明
实时同步只支持逻辑复制机制,逻辑复制使用发布和订阅模型,其中一个或多个订阅者订阅发布者节点上的一个或多个发布。订阅者从他们订阅的发布中提取数据。
表的逻辑复制通常从对发布者数据库上的数据进行快照并将其复制到订阅者开始。完成后,发布者上的更改会实时发送给订阅者。
创建账号。
操作详情请参见创建账号和数据库。
配置权限。
检查账号是否有replication权限。
select userepl from pg_user where usename='xxx'
预期返回结果为True,返回False则表示无权限,您可以通过如下语句进行授权。
ALTER USER REPLICATION;
准备工作2:检查是否支持备库
SELECT pg_is_in_recovery()
目前仅支持主库,预期返回结果为False,返回True时表示是备库,实时同步不支持备库,需修改数据源配置信息为主库的信息,请参见配置PostgreSQL数据源。
准备工作3:检查wal_level是否为logical
show wal_level
wal_level指定了wal_log的级别,预期返回结果为logical,否则不支持逻辑复制机制。
准备工作4:检查是否可以启动wal_sender进程
-- 查询 max_wal_senders
show max_wal_senders;
-- 查询 pg_stat_replication 数量
select count(*) from pg_stat_replication
当max_wal_senders不为空,且max_wal_senders值大于pg_stat_replication数量时,则表示有空闲可用的wal_sender进程。PostgreSQL数据库会为同步数据程序启动wal_sender进程来给订阅者发送日志。
对于每一个需要同步的表,需要手动执行ALTER TABLE [tableName] REPLICA IDENTITY FULL语句进行授权,否则实时同步任务会报错。
PostgreSQL实时同步任务启动后,会在数据库中自动创建slot、publications,slot名称格式为:dislot + 解决方案ID ,publication名称格式为:dipub + 解决方案ID,当实时同步任务停止或下线后,需手动删除,否则可能会导致PostgreSQL WAL 持续增长。
这个错误提示"Thereplicaidentityoftablesyouselectedisnotfull,pleasealtertablefirst.need alter table"表示你选择的PostgreSQL表的复制标识(replica identity)不完整。这是因为你选择了具有主键或者唯一索引的表进行复制,而这些索引在复制过程中没有被完全复制。
解决这个问题的方法是:
在DataWorks的控制台中,找到你选择的表,然后点击"修改"按钮。
在弹出的窗口中,找到"复制标识"选项,然后将其设置为"物理复制"。
保存更改后,重新启动你的实时同步任务。
辛苦针对所有源端表执行一下ALTER TABLE [tableName] REPLICA IDENTITY FULL ,此回答整理自钉群“DataWorks交流群(答疑@机器人)”
这个错误是由于您选择的 PostgreSQL 表的复制标识(replica identity)不完整所引起的。在 PostgreSQL 中,表的复制标识用于确定在逻辑复制过程中如何识别和追踪表中的行。默认情况下,PostgreSQL 使用 DEFAULT 复制标识,这意味着只有主键列被认为是复制标识。如果您选择的表没有主键列或复制标识不完整,那么在进行数据同步时就会出现该错误。
要解决这个问题,您可以通过以下步骤来修改表的复制标识:
例如,如果您的表名为 my_table,您可以执行以下 SQL 语句来修改复制标识:
ALTER TABLE my_table REPLICA IDENTITY FULL;
这将将表 my_table 的复制标识设置为完整复制标识。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。