40001: serialization_failure
PostgreSQL意味
SERIALIZABLE または REPEATABLE READ 分離レベルで、同時実行された変更と競合したためトランザクションをシリアライズできず、取り消された。これはデータ一貫性を守るための想定どおりの動作である。
原因
同じデータに同時アクセスするトランザクションをシリアライズ可能な順序に並べられない、高い同時実行下での書き込み競合、または SSI (Serializable Snapshot Isolation) が検出した危険な依存関係。
対処方法
これはバグではなく想定どおりのシグナルである: トランザクションをそのまま再試行する。アプリケーションに自動再試行ロジックを追加する。競合を減らすにはトランザクションを短くし、本当に必要でなければより低い分離レベル (READ COMMITTED) を使う。ホット行での競合が減るように設計する。