[pgsql-jp: 29146] Re: 同時更新の制御2

KASAHARA Norio no @ kasas.org
2003年 2月 19日 (水) 20:29:03 JST


かさはらと言います。こんばんは。

On 2003.2.19, at 10:52 Japan, TVH51179 @ biglobe.ne.jp wrote:

> 小林です。いつもお世話になっております。
>
>>  みやかわ@ホビー・データです。
>>
>>  ??? そのためにトランザクションがあるのでは?
>>
> ご指摘の通りでございます。
>
ここでは、トランザクションよりも「アイソレーション」(isolation)をキーワードに
調べた方がいいですよ。日本語マニュアルなら「隔離」という訳語になっています。
ユーザーズガイドを探してみてください。

一般的には、ロックメカニズムを使用することになるでしょう。
PostgreSQLでは、テーブルロックと行ロックが使用できますので、このケースでは
行ロックを使うことになるんでしょうね。

> トランザクションは片方が更新していても読込はでき、
> 更新時に片方のcommitを待つと認識しております。
>
> でも、今回は
> 片方が更新しようとすると、もう片方で読み込んでいるのでWAITし、
>                   ^^^^^^^
> もう片方においても更新時に、片方が読み込んでいるのでWAITして、
>              ^^^^^^^
> ”デッドロックを検出する”みたいなことが可能なのかな?
> と思ったのですが、どうなんでしょう??

PostgreSQLには、もちろん、デッドロックを検出する機能がありますが、この場合は
デッドロックは起こりませんよね。
更新しようとしているテーブルは一つなのだから。

> と、いうのは、カーソルを使用して順次読み込みを行っているので、
> カーソルの定義時に"for update"が使えなくて困っている次第であります。
> FETCH後にselectするのも格好悪いし・・・

カーソルでもFOR UPDATEは使えますよ。

--
カさはらのりお     no @ kasas.org




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