小编M.S*_*sti的帖子

为什么“SET LOCAL statement_timeout”在 PostgreSQL 函数中不能按预期工作?

我的理解是 PostgreSQL 函数的执行类似于事务。但是,当我尝试在函数中“SET LOCAL statement_timeout”时,它不起作用。以下是它在事务中的工作方式:

BEGIN; 
  SET LOCAL statement_timeout = 100; 
  SELECT pg_sleep(10); 
COMMIT;
Run Code Online (Sandbox Code Playgroud)

结果在哪里(如预期的那样):

BEGIN
SET
ERROR:  canceling statement due to statement timeout
ROLLBACK
Run Code Online (Sandbox Code Playgroud)

但是,如果我将相同的命令放在函数体中:

CREATE OR REPLACE FUNCTION test() RETURNS void AS '
    SET LOCAL statement_timeout = 100;
    SELECT pg_sleep(10);
' LANGUAGE sql;

SELECT test();
Run Code Online (Sandbox Code Playgroud)

超时不会发生,函数test()执行需要 10 秒。

请告知为什么这两种情况不同,以及我如何纠正它以在函数内设置语句超时。

postgresql transaction functions query-timeout

12
推荐指数
1
解决办法
1万
查看次数