是否无法利用"在冲突中无所事事"避免插入和违反非空约束?
例如......
INSERT INTO public.users (user, user_yob, sex) SELECT mom, mom_yob, 'F' FROM staging.users ON CONFLICT DO NOTHING;
产生此错误并停止......
INSERT INTO public.users (user, user_yob, sex) SELECT mom, mom_yob, 'F' FROM staging.users ON CONFLICT DO NOTHING
> ERROR: null value in column "user" violates not-null constraint
DETAIL: Failing row contains (0b159b81-6842-4ae7-961c-2e9cff8488b1, null, null, null, null, null, null, null, null, null, F).
理想情况下,将忽略此特定插入而不是引发错误。
答案 0 :(得分:0)
正如the documentation所说:
可选的
ON CONFLICT
子句指定了引发唯一违规或排除约束违规错误的替代操作。
NOT NULL
既不是唯一约束也不是排除约束。从技术上讲,它甚至不是PostgreSQL中的适当约束。
如果BEFORE INSERT
行包含违规的空值,则需要NULL
触发器返回NEW
。