[pgsql-jp: 40168] Re: 子テーブルの2回目の更新でデッドロック

Takahiro Itagaki itagaki.takahiro @ oss.ntt.co.jp
2010年 2月 15日 (月) 11:30:05 JST


HIRATSUKA Sadao <sh2 @ pop01.odn.ne.jp> wrote:

> 外部キー制約のあるテーブルで、子テーブルの2回目の更新で
> デッドロックが発生するという事象に悩まされています。
> PostgreSQL 8.4.2です。

手元で試してみましたが、
    ・8.3.9   → OK
    ・8.4.2   → デッドロック
    ・8.5dev  → OK
という結果でした。8.4 にだけ存在するバグのように見えます。

私のほうでも原因までは追いきれていないのですが、
本家にバグ報告をされてはいかがでしょうか?

# 8.4 でエンバグされたことより、8.5dev でなぜか直っていることのほうが
# 微妙に気持ち悪いです…

> create table parent (k int primary key, d varchar(10));
> create table child (k int primary key, f int, d varchar(10),
>     constraint child_fk1 foreign key (f) references parent (k));

> 以下のシーケンスで2回目の更新がブロックされています。
> 
> client1> begin;
> client1> update parent set d = 'a2' where k = 1;
> 
> client2> begin;
> client2> update child set d = 'aa2' where k = 11; -- ok
> client2> update child set d = 'aa3' where k = 11; -- blocked

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>




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