gpt4 book ai didi

postgresql - 如何强制 PostgreSQL 函数按顺序运行

转载 作者:行者123 更新时间:2023-11-29 11:56:20 24 4
gpt4 key购买 nike

我有一个 PostgreSQL 函数 A。许多客户会调用A:

- client X1 send query 1 "SELECT A();" then
- client X2 send query 2 "SELECT A();" then
- client X3 send query 3 "SELECT A();" then
...

如何强制函数A顺序运行?

意思是force: query 1 run --> finish or timeout --> query 2 run --> finish or timeout --> query run --> finish or timeout ...(不允许query 1和query 2同时运行)

最佳答案

使用advisory locks.

函数体中的第一个命令应该是(1234 是一个典型的整数常量):

perform pg_advisory_xact_lock(1234);

当两个并发 session 调用该函数时,其中一个将等待第二个 session 中的函数完成。这是事务级建议锁,在事务终止时自动释放。

或者,您可以使用 session 级建议锁,它可以(应该)手动释放:

create function example()
returns void language plpgsql as $$
begin
perform pg_advisory_lock(1234);
--
-- function's commands
--
perform pg_advisory_unlock(1234);
end $$;

在 session 中获得的任何咨询锁都会在 session 结束时自动释放(如果之前没有释放的话)。

关于postgresql - 如何强制 PostgreSQL 函数按顺序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com