[pgsql-jp: 26124] Re: トランザクション内でのレコードの削除

Hiroshi Inoue Inoue @ tpf.co.jp
2002年 5月 24日 (金) 18:19:35 JST


井上です。

ISHIDA Akio wrote:
> 
> こんにちは。石田@苫小牧市です。
> レコードを削除したときの、別のトランザクションからの
> 見えかたについての質問です。
> 
> 以下、a=> と b=> は別の接続です。
> 
> a=> create table t1 (i int, j text);
> a=> insert into t1 values (1, 'a');
> a=> begin;
> a=> delete from t1;
> a=> insert into t1 values (1, 'a');
> 
> b=> begin;
> b=> update t1 set i = 2 where j = 'a';
> (b は待ち状態)
> 
> a=> commit;
> (b に``UPDATE 0'' と表示される)
> b=> commit;
> 
> この後、select * from t1; すると、
>  i | j
> ---+---
>  1 | a
> (1 row)
> 
> となります。
> 
> つまり、b=> が update した時点では、 j = 'a' に該当する
> レコードがあるはずなのに、update ができないようです。
> この現象は正常な動きでしょうか?

PostgreSQLではupdateコマンドが発行された時点で(厳密
にいうと少し違いますが)存在しなかったデータは処理の
対象となりません。この動作が残念ながら好ましくないと
してもそれを修正するのは容易ではありません。

Hiroshi Inoue
	http://w2422.nsk.ne.jp/~inoue/



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