gpt4 book ai didi

postgresql - 如果未在命令行中指定,则仅在 psql 脚本中设置变量

转载 作者:行者123 更新时间:2023-11-29 11:54:17 24 4
gpt4 key购买 nike

我想给 选项 以在命令行上为我的 psql 脚本指定一些变量。

 psql -v myVar=myValue

但是我发现无法在 sql 脚本本身中为这些变量提供默认值。语法:

\set MyVar defaultValue

无条件地覆盖在 psql 命令行上指定的值 myValue

有什么方法可以检查 psql 中是否设置了变量?

最佳答案

psql 不支持为变量设置默认值,但您可以使用变通方法来完成。

这个 psql 命令:

\set myVar :myVar

如果变量已经通过 psql 设置(这意味着,myVar 被再次设置为他的值),则不执行任何操作,否则变量按字面设置为字符串 :myVar

使用这种情况和其他 psql 命令 \gset,您实际上可以为 myVar 设置默认值。把它放在你的 sql 脚本的顶部:

\set myVar :myVar
-- now myVar is set to the string ':myVar' if was not already set.
-- Checking it using a CASE statement:
SELECT CASE
WHEN :'myVar'= ':myVar'
THEN 'default_value'
ELSE :'myVar'
END AS "myVar" \gset -- < \gset call at end of the query

它似乎只适用于文本变量,但如果你需要数字变量,你可以转换为数字:

SELECT CASE 
WHEN :'myVar'= ':myVar'
THEN '10'
ELSE :'myVar'
END::numeric AS "myVar" \gset

\gset 如何工作:

\gset 允许您根据选择查询的结果设置变量。结果变量的命名类似于列名,这就是为什么您需要在查询末尾使用 AS "myVar" 子句(如果要使用变量名,请不要忘记双引号)大写字母)。

例如命令:

SELECT 'hello' AS var1 \gset

设置变量var1hello,同

\set var1 hello

查看此处了解更多信息:http://www.postgresql.org/docs/9.4/static/app-psql.html

关于postgresql - 如果未在命令行中指定,则仅在 psql 脚本中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582600/

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