2011/6/29 TAKATSUKA Haruka <harukat @ postgresql.jp>: >> トランザクション2では不定であるため、 >> B→C→D→A > SELECT FOR UPDATE の一文の動作自体が、各行を順に行ロックしていく、 > というもので、他のトランザクションと並行で動作していきます。 行のロック順序が常には同じにならない理由は、 Postgres が追記型であることも関連しています。 最初は A→B→C→D の物理順で並んでいても、更新すると 順序が入れ替わる場合があるため、ちょうど入れ替わった タイミングでデッドロックが発生したんだと思います。 説明の補足になれば。 -- Itagaki Takahiro