在pgsql
中,如何在函数运行期间锁定记录?考虑以下功能。
create or replace function foo.bar_func(int)returns int as $$
with s as (select * from foo.bar where id=$1);-- <--lock the fetched row [BEGIN]
/*
Some query, update, insert, ...
*/
select coalesce(s.id,-1) from s;--return something.
-- <-- release the locked row [END]
$$ language sql;
我喜欢在功能开始时锁定行(如果找到),直到完成其工作。
pg_advisory_lock(bigint)
如何运作?这有帮助吗?与select for update
有什么不同?