УСТАНОВИТЬ ЛОКАЛЬНЫЙ на ранее сохраненное значение
Я хочу временно изменить lock_timeout
в моей функции PL/pgSQL, и я подумал, что это будет так просто:
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
установка правильно?
1 ответ
Решение
Заявления о полезности, такие как SET
нельзя использовать с параметрами.
Вам нужно будет использовать динамический SQL, например
EXECUTE format('SET lock_timeout = %L', l_tmp_lock_timeout);
или используйте
SELECT set_config('lock_timeout', l_tmp_lock_timeout, FALSE);