テクノロジー · 実用ガイド

PostgreSQL の生成IDが重複?setval の前にシーケンスずれを証明する

制約と衝突値を読み、キーの生成元と所有シーケンスを確認し、書き込みを止めてから限定修復します。業務キー重複や競合には別の対処が必要です。

業務キー衝突とシーケンスずれを分けるオリジナル図。
オリジナルイラスト:キーと生成元を先に特定します。 Watch at Ease

重複キーエラーは制約値の存在を示すだけで、主キーシーケンスの誤りを証明しません。

制約と値を保存し、生成元を確認して、制御された書き込み条件でテーブルとシーケンスを比較します。

制約と衝突値を保存

完全なエラー、制約、DETAIL、文の形を保存します。業務キー重複はシーケンスで直りません。

IDの明示指定と import、seed、restore、failover を記録します。

生成機構を証明

default/identity を確認し pg_get_serial_sequence で所有シーケンスを解決します。

アプリ指定キーや複合制約なら retry、idempotency、元データを調べます。

進めずに状態を比較

MAX(id)、last_value、is_called を比較し、確認目的で nextval を呼びません。

start、increment、範囲、cycle、空テーブルを先に確認します。

書き込み停止後に限定修復

保守時間に writer を止めます。setval は即時可視で rollback されません。

証明済みシーケンスだけを直し、空テーブルは実際の start と is_called=false を使います。

検証して原因を閉じる

IDを省略した制御 insert を1回行い、新しいキーと行を確認します。

明示IDロード、複製、failover を修正し、再発時は setval の繰り返しを止めます。

writer停止、限定修復、検証、再発調査のオリジナル図。
オリジナルイラスト:証明した境界だけを修復します。 Watch at Ease