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