是否无法利用“ON CONFLICT DO NOTHING”来避免插入和违反非空约束?
例如...
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).
理想情况下,这个特定的插入将被忽略而不是引发错误。
最佳答案
The optional
ON CONFLICT
clause specifies an alternative action to raising a unique violation or exclusion constraint violation error.
NOT NULL
既不是唯一约束也不是排除约束。从技术上讲,它甚至不是 PostgreSQL 中的适当约束。您需要的是一个
BEFORE INSERT
返回 NULL
的触发器如果NEW
行包含有问题的空值。
关于postgresql - 使用非空约束在 Postgres 中什么都不做的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816629/