[pgsql-jp: 37981] Re: デッドロックの原因調査方法につきまして

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2007年 2月 6日 (火) 14:42:20 JST


板垣です。

Arimura Satoshi <sarimur1 @ gw.nsw.co.jp> wrote:

> > BEGIN;
> > ALTER TABLE A RENAME TO B;
> > ALTER TABLE C RENAME TO A;
> > DROP TABLE B;
> > COMMIT;
> 最初は上記のように1つにしておりました。
> その状態で、同様にデッドロックの現象が発生いたしましたので、
> 2つのトランザクションに変更した経緯があります。

DROPするテーブルから依存関係のあるオブジェクトの処理の
順序が問題なのかもしれませんね。
A, C が空のテーブルだと問題はないようです。

DROPするテーブルと、そのTOASTテーブルの両方を、
先に明示的なロックをしておくことでデッドロックを回避できないでしょうか?

BEGIN;
LOCK TABLE A, pg_toast_<oid_of_A> IN ACCESS EXCLUSIVE MODE;
ALTER TABLE A RENAME TO B;
ALTER TABLE C RENAME TO A;
DROP TABLE B;
COMMIT;

------------------------------------------------------------
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





pgsql-jp メーリングリストの案内