如何在表创建时

时间:2017-08-01 08:15:44

标签: postgresql

我在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不起作用。

1 个答案:

答案 0 :(得分:1)

在插入或插入规则之前添加触发器而不是 - 否则必须通过插入查询来处理。两种解决方案都需要在每个插入上有更多资源。

使用带插入参数的函数的替代方法,它将检查重复项,因此最终用户将使用函数而不是INSERT语句。

WHERE EXISTS子查询不是原子顺便说一句 - 所以你在检查后仍然可以有异常......

9.5 ON CONFLICT DO NOTHING仍是最佳解决方案