【问题标题】:How to set Ignore Duplicate Key in Postgresql while table creation itself如何在创建表时在 Postgresql 中设置忽略重复键
【发布时间】:2017-08-01 16:19:16
【问题描述】:

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

【问题讨论】:

  • AFAIK,没有这种可能性。我不希望插入数据的人员或进程在其数据被简单地忽略或丢弃时不以任何方式收到通知。

标签: postgresql


【解决方案1】:

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

使用带有参数的函数进行插入的另一种方法,它将检查重复项,因此最终用户将使用函数而不是INSERT 语句。

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

9.5 ON CONFLICT DO NOTHING 仍然是最好的解决方案

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 2012-12-06
    • 2022-01-22
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多