gpt4 book ai didi

postgresql - 从 PL/PGSQL 引用 session 变量 (\set var ='value')

转载 作者:行者123 更新时间:2023-11-29 11:43:08 25 4
gpt4 key购买 nike

我可以使用以下方法将变量传递到 PostgreSQL 中

psql --variable="var='value'" <<<'SELECT :var'

...并在本例中将它们称为 :var 在 SQL 查询中传递给标准输入上的 psql。

但是,这不适用于使用 PL/PGSQL 的代码:

psql --variable=var="'value'" <<'EOF'
DO $$
BEGIN
SELECT :var;
END;
$$
EOF

...产生错误:

ERROR:  syntax error at or near ":"

如何解决?

最佳答案

您不能直接在 plpgsql 代码中使用 psql 变量。字符串中的符号替换被阻止:

postgres=> select :'xx';
?column?
----------
AHOJ
(1 row)

postgres=> select ' :xx ';
?column?
----------
:xx
(1 row)

但是你可以设置一个服务器 session 变量,然后在 plpgsql 代码中(在服务器端)使用这种变量:

postgres=> set myvars.xx = :'xx';
SET
postgres=> do $$ begin
raise notice '>>%<<', current_setting('myvars.xx');
end $$;
NOTICE: >>AHOJ<<
DO

您可以从命令行使用相同的技术,请参阅:http://okbob.blogspot.cz/2015/01/how-to-push-parameters-to-do-statement.html

最后的注释——代码

BEGIN  SELECT some;END;

在 plpgsql 中无效。任何 SELECT 的结果都应该存储在一些变量中。 Postgres 不可能将自由 SELECT 的结果返回给客户端 - DO 语句不等同于 MS SQL 过程。

关于postgresql - 从 PL/PGSQL 引用 session 变量 (\set var ='value'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868514/

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