PostgreSQL の主キー シーケンスの不一致を解決する
主キーのシーケンスがテーブルの行とずれていると、イライラする重複キー エラーが発生する可能性があります。これは、シーケンスの整合性が保持されていないデータのインポートまたは復元中によく発生します。 修正方法は次のとおりです:
1.最高の ID を見つけます:
MAX()
関数を使用して、テーブル内の最大の ID を特定します。
<code class="language-sql">SELECT MAX(id) FROM your_table;</code>
2.シーケンスの次の値を取得します:
このクエリは、シーケンスの次に生成される値を示します:
<code class="language-sql">SELECT nextval('your_table_id_seq');</code>
3.シーケンスをリセットします (必要な場合):
シーケンスの次の値がテーブルの最大 ID より小さい場合は、同時挿入を防ぐためにトランザクション内でシーケンスをリセットします。
<code class="language-sql">BEGIN; LOCK TABLE your_table IN EXCLUSIVE MODE; SELECT setval('your_table_id_seq', (SELECT GREATEST(MAX(your_id), nextval('your_table_id_seq') - 1) FROM your_table)); COMMIT;</code>
出典: Ruby フォーラムのディスカッションを基に作成。
以上がテーブル行と同期していない Postgres 主キー シーケンスをリセットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。