如何修改Informatica会话属性解决Unique constraint报错问题
Informatica会话唯一约束报错的会话属性修复方案
唯一约束报错的核心原因是会话向目标表写入了与已有记录重复的主键/唯一索引字段值,在无需修改映射逻辑、已确认源数据业务逻辑无误的前提下,可通过修改以下会话属性解决问题:
1. 切换目标表加载为Upsert/更新模式
- 进入会话编辑界面,切换到「映射」标签,选中报错的目标表节点
- 在右侧属性栏找到
Target Load Type配置,将默认的Normal插入模式修改为Data Driven - 下拉找到「更新策略」配置区,按需求勾选对应选项:
- 仅需更新已存在的重复主键记录:勾选
Update as Update - 主键存在则更新、不存在则插入:同时勾选
Update as Update和Insert if no match exists(即Upsert模式),可完全规避唯一键冲突问题
- 仅需更新已存在的重复主键记录:勾选
2. 开启重复记录忽略配置(仅临时场景使用)
- 同上述目标表属性页,找到
Stop on errors参数,将默认值1修改为大于预估重复数据量的数值(例如500) - 找到
Treat duplicate rows as配置项,选择Ignore,会话运行时遇到唯一键冲突的记录会直接跳过,不会中断会话执行 - 注意:该配置会丢弃冲突的源数据,仅适用于允许临时丢数的调试场景,生产环境需先排查重复数据产生根因再使用
3. 配置前置SQL清空目标表对应数据(适用于全量加载场景)
如果该会话为全量加载任务,可通过前置SQL清空目标表待加载范围的旧数据,从根源避免重复:
- 在目标表属性栏找到
Pre SQL配置项,填入对应清空语句,例如全量加载填TRUNCATE TABLE 你的目标表名,按日期分区加载填DELETE FROM 你的目标表名 WHERE dt = TO_CHAR(SYSDATE,'yyyy-mm-dd') - 勾选
Execute Pre SQL选项,保证会话启动前先执行清空操作
所有属性修改前请先确认重复数据的产生原因,若为源系统输出数据错误导致的重复,优先修复源数据问题,不要直接通过会话配置绕开业务校验规则。
内容的提问来源于stack exchange,提问作者nithin
相关产品推荐
相关产品推荐

