关于冲突在Postgres中做什么都没有空约束

时间:2018-02-15 21:31:49

标签: postgresql

是否无法利用"在冲突中无所事事"避免插入和违反非空约束?

例如......

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).

理想情况下,将忽略此特定插入而不是引发错误。

1 个答案:

答案 0 :(得分:0)

正如the documentation所说:

  

可选的ON CONFLICT子句指定了引发唯一违规排除约束违规错误的替代操作。

NOT NULL既不是唯一约束也不是排除约束。从技术上讲,它甚至不是PostgreSQL中的适当约束。

如果BEFORE INSERT行包含违规的空值,则需要NULL触发器返回NEW