私はPostgresをデータベースとして使用するRails3アプリを開発しています。以下に示す表があります。
Table "public.test"
Column | Type | Modifiers
---------------+---------+-----------
id | integer | not null
some_other_id | integer |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
"some_other_id_key" UNIQUE CONSTRAINT, btree (some_other_id)
これには2つの列があります。
- 主キーであるid(railsによって自動的に作成されます)
- some_other_id。別のシステムによって生成されたキーが含まれています。このIDは一意である必要があるため、テーブルに一意のキー制約を追加しました。
ここで、重複する行を挿入しようとすると、some_other_id
失敗し(良好)、Postgresログに次の出力が表示されます。
ERROR: duplicate key value violates unique constraint "some_other_id_key"
問題は、アプリが同じIDを2回追加しようとすることが完全にメインラインであり、ログにこの「エラー」メッセージがスパムされていることです。これにより、さまざまな問題が発生します。ファイルに大量のディスクスペースが必要になり、診断が失われます。ノイズ、Postgresはログファイルをサイズ制限内に保つために診断を破棄する必要があります。
誰かが私がどのようにできるか知っていますか:
- このキーに関するすべてのログを抑制するか、トランザクションで何かを指定することにより、ログを抑制します
INSERT
。 - 他のPostgres機能を使用して、重複するキーを見つけ、を試さないでください
INSERT
。ルールとトリガーについて聞いたことがありますが、どちらも機能しません(Postgresの専門家ではありませんが)。
すべてのソリューションは、次のように挿入を行うRailsで動作する必要があることに注意してください。
INSERT INTO test (some_other_id) VALUES (123) RETURNING id;