Azure Data Factory映射数据流PostgreSQL jsonb列插入报错求助
使用Azure Data Factory(ADF)映射数据流在两个PostgreSQL数据库间复制数据,目标表结构如下:
Create table mytable ( id int, json_column jsonb );
源库与目标库表结构完全一致。调试时限制仅复制一行数据(json列值为NULL),ADF自动生成的插入语句如下:
INSERT INTO "T_6726_7518bded039e4697aedcfafdd213e402" ("id","json_column","r0c0604bf127847bdac0e8012a40d8651") VALUES (123,NULL,8)
执行该语句时触发错误:
ERROR: column "json_column" is of type jsonb but expression is of type character
Hint: You will need to rewrite or cast the expression.
但相同语句在pgAdmin中可正常执行,询问ADF是否支持jsonb列及解决办法。
解决办法
显式转换JSONB字段类型:在映射数据流中添加派生列转换,将jsonb列的NULL值显式转换为对应类型。可使用表达式
toJson(NULL)或cast(NULL as 'jsonb'),强制ADF识别字段类型,避免隐式转换错误。设置目标表JSONB列默认值:修改目标表,将json_column列的默认值设为
NULL::jsonb,即使ADF传入的NULL被识别为字符类型,PostgreSQL会自动匹配类型:ALTER TABLE mytable ALTER COLUMN json_column SET DEFAULT NULL::jsonb;改用复制活动:替换映射数据流为ADF复制活动,复制活动对PostgreSQL jsonb类型的兼容性更好,通常能自动处理NULL值,无需额外转换。
更新PostgreSQL驱动版本:检查ADF链接服务的PostgreSQL驱动版本,确保使用最新版本,旧版本可能存在jsonb类型的兼容性问题。
内容的提问来源于stack exchange,提问作者Mark Wojciechowicz

