2017-08-01 15 views
2

PostgreSQL 9.5でIDを主キーとするテーブルを作成しています。誰かが重複IDを挿入しようとすると、テーブルに行を挿入している間、例外を発生させる代わりに無視されるようにしたい。エントリを重複させるテーブル作成自体が無視される間に、これを設定できるような方法はありますか?テーブルの作成時にPostgreSQLで重複キーを無視する方法

挿入クエリを書くときに重複挿入の問題を解決するには、多くの手法があります。つまり、ON CONFLICT DO NOTHINGを使用するか、WHERE EXISTS句などを使用します。しかし、これをテーブル作成時に処理して、すべてのことを気にする必要はありません。

RULEの作成は可能な解決策の1つです。他にも解決策はありますか?

`CREATE TABLE dbo.foo (bar int PRIMARY KEY WITH (FILLFACTOR=90, IGNORE_DUP_KEY = ON))` 

正確には、この文は自分のマシン上のPostgreSQL 9.5では機能しませんが、

+0

私の知る限り最善の解決策である、そのような可能性はありません。データを単純に無視したり破棄したりしても、データを挿入する人やプロセスが通知されないようにしたいとは思いません。 – joanolo

答えて

1

挿入する前にトリガーを追加するか、挿入時にルールを実行します。そうでなければ、クエリを挿入して処理する必要があります。両方のソリューションでは、各インサートに多くのリソースが必要になります。

insertの引数を持つ関数を使用する別の方法では重複をチェックするので、エンドユーザはINSERTの代わりに関数を使用します。

WHERE EXISTSサブクエリところでアトミックではありません - あなたはまだチェックした後に、例外を持つことができます...

9.5 ON CONFLICT DO NOTHINGはまだ

関連する問題