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

postgresql重複キーが一意性制約に違反しています

    この記事では、シーケンスが同期していない可能性があり、手動で同期を戻す必要があることを説明しています。

    URLが変更された場合の記事からの抜粋:

    PostgreSQLデータベースにデータを挿入しようとしたときにこのメッセージが表示された場合:

    ERROR:  duplicate key violates unique constraint
    

    これは、作業しているテーブルの主キーシーケンスが、おそらく大量インポートプロセス(またはそれらの線に沿った何か)が原因で、何らかの理由で同期していないことを意味します。これを「バグ設計」と呼びますが、ダンプファイルから復元した後、主キーインデックスを手動でリセットする必要があるようです。とにかく、値が同期していないかどうかを確認するには、次の2つのコマンドを実行します。

    SELECT MAX(the_primary_key) FROM the_table;   
    SELECT nextval('the_primary_key_sequence');
    

    最初の値が2番目の値よりも大きい場合、シーケンスは同期していません。 (念のため)PGデータベースをバックアップしてから、次のコマンドを実行します。

    SELECT setval('the_primary_key_sequence', (SELECT MAX(the_primary_key) FROM the_table)+1);
    

    これにより、シーケンスは、シーケンス内の既存の主キーよりも高い次の使用可能な値に設定されます。



    1. ORA-01438:3を挿入するときに、この列に許可されている指定された精度よりも大きい値

    2. グループ化されたSQL結果の各グループの最大値を持つレコードを取得します

    3. MySQLのHEX()とUNHEX()はPostgresで同等ですか?

    4. Java-例外の最初の原因を見つける