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

KASAHARA Norio no @ kasas.org
2003年 2月 20日 (木) 11:45:11 JST


かさはらです。こんにちは。

On 2003.2.20, at 11:25 Japan, TVH51179 @ biglobe.ne.jp wrote:

> カーソルの定義時にfor updateを使用すると、
> コンパイルは正常に終了するのですが、
> 実行すると、カーソルのオープン時に
> DECLARE/UPDATE is not supported
> cursors must be READ ONLY
> といったエラーが発生してしまいます。

すみません。
リファレンスマニュアルを斜め読みして、できると早合点してポストしてしまいま
した。PostgreSQLでは、まだサポートされていないんですね。
よく読めば、ちゃんと書いてありました。

であれば、FETCHで読み込んだものを、主キーかOIDを使って、SELECT FOR UPDATEし
直すしかないですね。
「FETCH後にselectするのも格好悪い」と書かれていますが、そんなことはないですよ。
この場合のSELECTはデータを取得するためではなく、ロックを獲得するための命令だ
と考えてください。
特に、カーソルで読み込んだ行全てを更新するのではなく、ある条件で一部の行だけ
を更新するような場合は、SELECT FOR UPDATEで読み直すというのは、更新しない行
までロックしてしまわないようにするための常套手段です。

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




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