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