我正在Postgresql 9.5中创建一个表,其中id是主键。在表中插入行时,如果有人试图插入重复的id,我希望它被忽略,而不是引发异常。是否有任何方法可以在表创建时设置此项,从而忽略重复项。
在编写插入查询时,有许多技术可以解决重复插入问题,例如使用ON CONFLICT DO NOTHING或使用WHERE EXISTS子句等,但我希望在表创建结束时处理此问题,以便编写插入查询的人不必费心任何事。
创建规则是可能的解决方案之一。还有其他可能的解决办法吗?可能是这样的:
`CREATE TABLE dbo.foo (bar int PRIMARY KEY WITH (FILLFACTOR=90, IGNORE_DUP_KEY = ON))`
尽管这句话在我的机器上的Postgresql 9.5上不起作用。
最佳答案
在插入前添加触发器或插入时添加规则-否则必须通过插入查询来处理。这两种解决方案在每次插入时都需要更多的资源。
另一种使用带有insert参数的函数的方法,它将检查重复项,因此最终用户将使用function而不是INSERT
语句。WHERE EXISTS
子查询不是原子btw-因此在检查之后仍然可以有异常。。。
9.5ON CONFLICT DO NOTHING
仍然是最好的解决方案
关于postgresql - 创建表本身时如何在Postgresql中设置忽略重复键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45432450/