我在Postgresql 9.5中创建一个表,其中id是主键。如果有人试图插入重复的id,在表中插入行,我希望它被忽略而不是引发异常。是否有任何方式可以设置这个,而表创建本身就会忽略重复的条目。
有许多技术可以在编写插入查询时解决重复插入问题,即使用ON CONFLICT DO NOTHING,或使用WHERE EXISTS子句等。但我想在表创建端处理此问题,以便编写插入查询的人不会#39 ; t需要打扰任何人。
创建RULE是可能的解决方案之一。有其他可能的解决方案吗?也许是这样的:
`CREATE TABLE dbo.foo (bar int PRIMARY KEY WITH (FILLFACTOR=90, IGNORE_DUP_KEY = ON))`
虽然这句话在我的机器上对Postgresql 9.5不起作用。
答案 0 :(得分:1)
在插入或插入规则之前添加触发器而不是 - 否则必须通过插入查询来处理。两种解决方案都需要在每个插入上有更多资源。
使用带插入参数的函数的替代方法,它将检查重复项,因此最终用户将使用函数而不是INSERT
语句。
WHERE EXISTS
子查询不是原子顺便说一句 - 所以你在检查后仍然可以有异常......
9.5 ON CONFLICT DO NOTHING
仍是最佳解决方案