この記事では、シーケンスが同期していない可能性があり、手動で同期を戻す必要があることを説明しています。
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);
これにより、シーケンスは、シーケンス内の既存の主キーよりも高い次の使用可能な値に設定されます。