在以下 PgSql 存储函数中:
CREATE OR REPLACE FUNCTION get_offer_from_id(
offer_id bigint)
RETURNS json AS $$
DECLARE
res "entity_data_result";
r "get_offer_data";
BEGIN
FOR r IN SELECT * FROM "get_offer_data"
WHERE "id" = offer_id
LIMIT 1
FOR SHARE
LOOP
res.found := true;
res.data := row_to_json(r);
END LOOP;
RETURN row_to_json(res);
END; $$
LANGUAGE plpgsql;
使用 FOR SHARE 是否有真正的好处,或者可以将其从查询中删除?
这取决于交易中还发生了什么。
在那里,在事务提交或回滚之前
for share
,没有人可以更新select
ed行。get_offer_data
没有上下文,真的不可能说出添加锁的最初目的是什么。