[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 メーリングリストの案内