【发布时间】:2023-04-01 05:19:01
【问题描述】:
我正在尝试使用 pl/pgsql 函数中的变量设置 application_name。我需要设置一些变量,所以我想包装在一个函数中,而不是让客户端多次运行该命令。
但是当我跑步时
my_variable := 'foo';
SET application_name = my_variable;
它将 application_name 设置为 my_variable 而不是 foo。
这是在 postgresql11 上。我尝试以各种方式引用变量以使其评估,但到目前为止没有运气。
当我运行一个简单的
SET application_name = 'foo';
它按预期工作。我已经尝试了引用另一个答案的一些字符串:How do you use script variables in psql?,但这些似乎都不适合我。
我目前的代码是:
CREATE OR REPLACE FUNCTION app_name_test(
p_application_name VARCHAR(64)
) RETURNS BOOLEAN
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
RAISE INFO 'Setting Application Name To: %', p_application_name;
SET application_name = p_application_name;
RETURN TRUE;
END;
$$;
SELECT app_name_test('This_is_a_test');
我很确定这是可能的,但我必须以某种方式引用字符串。非常感谢。
编辑:下面来自 a_horse_with_no_name 的 cmets 中的答案解决了这个问题。
EXECUTE FORMAT('SET application_name = %L', p_application_name);
虽然知道为什么这适用于表(扩展变量)但不适用于这个特定的 SQL,但会很有趣。例如
SELECT * from table where column = my_var;
有效,但以上没有。
【问题讨论】:
-
您尝试过动态 SQL 吗?
execute format('set application_name = %L', p_application_name); -
这行得通。非常感谢。我将编辑问题以显示已解决。
标签: postgresql