私のHi/Loの実装では、排他テーブルロックを取得し、値を更新して1行を選択する関数が必要です。私は、次のコードを思い付いた:機能を呼び出すときにテーブルをロックし値を更新して行を返すPostgresql関数
CREATE OR REPLACE FUNCTION bb_next_hi(tbl varchar(35))
RETURNS setof record AS
$$
LOCK TABLE hilo IN ACCESS EXCLUSIVE MODE;
OPEN ref FOR SELECT hi as "Hi", lo as "Lo", "table" as "Table" FROM hilo WHERE "table" = $1;
UPDATE hilo SET hi = hi + 1 WHERE "table" = $1
RETURN ref;
$$ LANGUAGE plpgsql;
はしかし、それは「無名ポータル3」と同様の内容ではない行が、一つの列を返します。私は返されたref(以上)を繰り返す必要がありますね?
私が使用できるもう1つのアプローチは、UPDATE RETURNINGステートメントを使用することですが、この場合に競合状態が発生するかどうかはわかりません。どんな助けもありがとう。おかげ
なぜ、単一の行だけをロックしたいのですか? –
私は読者をロックする他の方法もないと思います。たぶん私は間違っていて何かを誤解していましたが、もしそうなら、いくつかの説明のためにはすばらしいでしょう:) – Davita