postgresql - 使用非空约束在 Postgres 中什么都不做的冲突

标签 postgresql

是否无法利用“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 documentation说:

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/

相关文章:

postgresql - 如何将数据库中的所有列转换为不区分大小写

PostgreSQL:将数据复制到具有不同数据类型的另一列

sql - 为什么不直接从客户端连接到 SQL 服务器?为什么我们需要客户端-服务器模型中的应用服务器?

postgresql - 我可以从 Postgres 中的任意查询中获取类型吗?

postgresql - 玩框架postgresql : Database 'default' needs evolution

python - 生成在 PostgreSQL 表索引中运行良好的自然主键值的图像哈希算法?

node.js - Express JS 对查询结果返回 null,并在使用 pgAdmin 查询时显示值

ruby-on-rails - Rails Impressionist 进行昂贵的查询

php - 检查SQL约束值

postgresql - 了解递归 CTE 的步骤