【问题标题】:SET LOCAL to a previously stored value将 LOCAL 设置为先前存储的值
【发布时间】:2020-01-24 10:21:20
【问题描述】:

我想在我的 PL/pgSQL 函数中临时更改lock_timeout,我想就这么简单:

CREATE OR REPLACE FUNCTION public.myfunction()
RETURNS void AS
$body$
DECLARE
    l_tmp_lock_timeout TEXT;
BEGIN
    -- We want this to bail out when no lock is gained
    SHOW lock_timeout INTO l_tmp_lock_timeout;
    SET LOCAL lock_timeout TO '10s';
    RAISE NOTICE 'Local lock timeout set to 10s, was %', l_tmp_lock_timeout;

    -- ... do stuff ...

    -- and reset the lock timeout
    SET LOCAL lock_timeout TO l_tmp_lock_timeout;
    RAISE NOTICE 'Local lock timeout set to %', l_tmp_lock_timeout;

    RETURN;    
END;
$body$
LANGUAGE 'plpgsql'

但这给了我这个结果:

NOTICE:  Local lock timeout set to 10s, was 0
ERROR:  invalid value for parameter "lock_timeout": "l_tmp_lock_timeout"
CONTEXT:  SQL statement "SET LOCAL lock_timeout TO l_tmp_lock_timeout"
PL/pgSQL function myfunction() line 48 at SQL statement

如何正确存储和重置 lock_timeout 设置?

【问题讨论】:

    标签: postgresql settings plpgsql lock-timeout


    【解决方案1】:

    SET 等实用程序语句不能与参数一起使用。

    您必须使用动态 SQL,例如

    EXECUTE format('SET lock_timeout = %L', l_tmp_lock_timeout);
    

    或使用

    SELECT set_config('lock_timeout', l_tmp_lock_timeout, FALSE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多