PostgreSQLで子テーブルへのINSERT後にFOR UPDATEすると、外部キーのロックでデッドロックする理由
PostgreSQLで、子テーブルへのINSERT後に親テーブルをFOR UPDATEするとデッドロックが発生する理由を解説。これは、子テーブルINSERT時に外部キー制約により親テーブルのタプルが共有ロックされ、その後にFOR UPDATEで排他ロックを取得しようとするとロック競合が起き、相互待ちに陥るため。解決策は、子テーブルINSERT前に親テーブルをFOR UPDATEで先にロックすることである。






