postgresql – Postgres SELECT … FOR UPDATE在函数中
我有两个关于在Postgres函数中使用SELECT … FOR UPDATE行级锁定的问题:
>我选择哪一列是否重要?他们与什么数据有任何关系,我需要锁定然后更新? SELECT * FROM table WHERE x=y FOR UPDATE; VS SELECT 1 FROM table WHERE x=y FOR UPDATE; >我不能在函数中进行选择而不保存数据,所以我保存到一个虚拟变量。这似乎是黑客这是做事的正确方法吗? 这是我的功能: CREATE OR REPLACE FUNCTION update_message(v_1 INTEGER,v_timestamp INTEGER,v_version INTEGER) RETURNS void AS $$ DECLARE v_timestamp_conv TIMESTAMP; dummy INTEGER; BEGIN SELECT timestamp 'epoch' + v_timestamp * interval '1 second' INTO v_timestamp_conv; SELECT 1 INTO dummy FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE; UPDATE my_table SET (timestamp) = (v_timestamp_conv) WHERE userid=v_1 AND version < v_version; END; $$ LANGUAGE plpgsql;
不,没关系。即使使用SELECT 1 FROM TABLE WHERE … FOR UPDATE,查询将锁定满足条件的所有行。
在Pl / PgSql中使用PERFORM命令来丢弃查询结果: 代替: SELECT 1 INTO dummy FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE; 使用: PERFORM 1 FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |