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

Kiyoshi Mizuno kiyoshi_mizuno @ mail.toyota.co.jp
2007年 2月 5日 (月) 15:16:29 JST


水野です。

2つのトランザクションを実行するのが1つのセッションか別個の
セッションかなども気になるところですが、

> -----
> BEGIN;
> ALTER TABLE A RENAME TO B;
> ALTER TABLE C RENAME TO A;
> COMMIT;
> 
> BEGIN;
> DROP TABLE B;
> COMMIT;
> -----
> 上記バッチ処理で、AテーブルはフロントのWeb側から常に参照できるようにと
> 考えておりました。
> しかし、DROP TABLE C を実行をした際にデッドロック処理が
> 不定期に発生いたしました。下記がログ内容です。

この2つのトランザクション、以下のように1つにしちゃってはダメですか?

BEGIN;
ALTER TABLE A RENAME TO B;
ALTER TABLE C RENAME TO A;
DROP TABLE B;
COMMIT;

テーブルの枠組みが無いと困るなら

BEGIN;
ALTER TABLE A RENAME TO B;
ALTER TABLE C RENAME TO A;
DROP TABLE B;
CREATE TABLE B(中略);
COMMIT;

それともアプリケーション的にテーブルBの削除を別トランザクションで
実行する必要があるんでしょうか?
#って、あるからやってるんですよね、たいてい。




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