# instinct: INSERT/UPDATEを含むバッチ実行前にUNIQUE制約や外部キー制約を確認する
INSERT/UPDATEを含むバッチ処理を実行する前に、対象テーブルのUNIQUE制約と外部キー制約を事前確認する経験則。「0件発見/0件保存」という静かな失敗の多くは、`ON CONFLICT (href) DO NOTHING`による重複スキップや`group_id`の不一致が原因だった。エラーが出ずに処理が完了しているように見えても実際にはデータが挿入されていないケースを防ぐため、バッチ実行前にテーブルのDDLや既存データとの整合性を確認することが重要。
## ポイント
- 「0件発見/0件保存」は ON CONFLICT DO NOTHING による静かなスキップが原因のことが多い
- 外部キー(group_id等)の不一致は INSERT 自体を失敗させずにゼロ件結果を返す
- バッチ前に \d tablename でUNIQUE制約・FK制約を確認する習慣をつける
- コードカテゴリの作業(スクレイパー・ボット追加)時に特に適用する
## 関連ページ
[[INSERT/UPDATE を含むバッチ実行前に UNIQUE 制約や外部キー制約を確認する]] [[SQLを実行する前にカラム名を正確に確認する(特に PostgreSQL の統計ビュー)]] [[PostgreSQL接続確認前にパスワード環境変数の有効性を検証する]] [[新規 bot を追加する前に bot_registry.py の BOTS 辞書にキーが含まれているか確認]]
## 関連概念(未作成)
`ON CONFLICT句の挙動と静かな失敗パターン` `バッチ処理の事前preflight_check設計` `外部キー整合性チェックスクリプト`
instinct: INSERT/UPDATEを含むバッチ実行前にUNIQUE制約や外部キー制約を確認する