sql >> データベース >  >> RDS >> PostgreSQL

このルールが重複キー違反を防止しないのはなぜですか?

    デフォルトのルール現在のアクションに追加 :

    ただし、INSTEADルールを使用すると、アクションを置き換えることができます。

    したがって、INSTEADを指定する 必要があると思います。 :

    CREATE OR REPLACE RULE ignore_duplicate_inserts AS
       ON INSERT TO mytable
       WHERE (EXISTS ( SELECT mytable.id
               FROM mytable
              WHERE mytable.id = new.id)) DO INSTEAD NOTHING;
    

    INSTEADがない場合、「INSERTの代わりに何もしない」と言いたい場合、ルールは基本的に「INSERTを実行してから何もしない」と言い、AFAIK、DO INSTEAD NOTHING

    私はPostgreSQLルールの専門家ではありませんが、「INSTEAD」を追加することでうまくいくと思います。

    更新 :araqnid ありがとうございます

    したがって、この状況ではルールは機能しません。ただし、トリガーはCOPY FROM中に発生するため、BEFORE INSERT NULLを返すトリガー 重複行を検出したとき:

    そうは言っても、araqnidの「すべてを一時テーブルにロードし、クリーンアップして、最終的な宛先にコピーする」方が、あなたのような一括ロード操作のより賢明な解決策になると思います。



    1. MySQLでのBINARYLIKE操作のインデックス作成

    2. SQL一度に複数のテーブルを作成する

    3. 1つのノードのデッドロックがクラスター全体をクラッシュさせないようにするにはどうすればよいですか?

    4. OSErrorに対処するにはどうすればよいですか:ElasticBeanstalkのデプロイ中にmysql_confignot foundエラーが発生しますか?