tag:blogger.com,1999:blog-988385995704066370.post647181130623563986..comments2023-11-18T18:16:49.888+09:00Comments on SHANON Engineer's Blog: そのデッドロック、知ってました?kmthttp://www.blogger.com/profile/00284970260032462549noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-988385995704066370.post-892517006594312522017-11-28T17:02:17.487+09:002017-11-28T17:02:17.487+09:00ありがとうございます。sugimotoに代わり御礼申し上げます。ありがとうございます。sugimotoに代わり御礼申し上げます。ishikawahttps://www.blogger.com/profile/05817672962040548522noreply@blogger.comtag:blogger.com,1999:blog-988385995704066370.post-89792938195250960252017-11-27T18:15:51.008+09:002017-11-27T18:15:51.008+09:00参考になる記事をありがとうございます。
今後検索で訪れる方のための補足なのですが、例3は最新のPo...参考になる記事をありがとうございます。<br /><br />今後検索で訪れる方のための補足なのですが、例3は最新のPostgresでは再現しません。<br />おそらく外部キー制約による参照先テーブルの行ロックが、9.3で導入されたFOR KEY SHAREを使うようになり、競合しにくくなったためです。<br />http://paquier.xyz/postgresql-2/postgres-9-3-feature-highlight-for-key-share-and-for-no-key-update/<br /><br />そもそも外部キー制約はキーの参照先の行の存在だけを制約するもので、行の存在や特定に必要となるキーに関係ない更新までブロックしてしまう必要はないので、より細かいレベルでロックを使い分けられるようにしたということのようです。<br />とはいえ安易にSELECT FOR UPDATEを使うとやはりデッドロックが発生することはあるため、被参照列の更新やDELETEが発生しない場合はSELECT FOR KEY UPDATEするといった対策を意識しておく必要がありそうです。Yuya Miyazakinoreply@blogger.com