You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache NiFi使用PutDatabaseRecord插入含Enum列的PostgreSQL表失败求助

解决NiFi向PostgreSQL插入自定义枚举类型失败的问题

方法一:在PutSQL处理器的INSERT语句中显式转换类型

PostgreSQL支持直接将字符串转换为自定义枚举类型,只需在INSERT语句中对目标字段做类型转换:

  1. 打开PutSQL处理器的配置界面,修改SQL语句
  2. 将原来的占位符写法(如INSERT INTO your_table (insurer, col1) VALUES (?, ?))修改为:
    INSERT INTO your_table (insurer, col1) VALUES (?::"Insurer", ?)
    
    或者使用CAST语法:
    INSERT INTO your_table (insurer, col1) VALUES (CAST(? AS "Insurer"), ?)
    
    注意:枚举类型名"Insurer"必须带双引号,因为你创建时用了双引号定义,PostgreSQL会严格区分大小写。

方法二:使用PutDatabaseRecord搭配类型映射

如果用PutDatabaseRecord处理器(更适合批量数据处理),可以通过配置Record Writer实现自动转换:

  1. 确保你的输入Record Schema中,insurer字段为string类型,且值与枚举值完全匹配(如'INSURER-A')
  2. 配置PostgreSQLJDBCRecordWriter时,找到Column Types Mapping属性,添加映射规则:
    insurer:"Insurer"
    
    该规则会告诉Writer将insurer字段的字符串值转换为PostgreSQL的"Insurer"枚举类型
  3. 确保PutDatabaseRecord的Record Writer选择上述配置好的PostgreSQLJDBCRecordWriter

关键注意事项

  • 必须保证JSON中的insurer字段值与枚举定义的选项完全一致(包括大小写、连字符),否则转换会失败
  • PostgreSQL中带双引号的标识符(如"Insurer")区分大小写,所有涉及该枚举类型的SQL语句或配置都要严格使用双引号包裹类型名

内容的提问来源于stack exchange,提问作者Yamit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:55:28