我想给option在命令行上为我的 psql 脚本指定一些变量。
psql -v myVar=myValue
但是我发现无法在 sql 脚本本身中为这些变量提供默认值。语法:
\set MyVar defaultValue
覆盖值myValue
在 psql 命令行上无条件指定。
有没有办法检查 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
设置变量var1
to hello
,与
\set var1 hello
请参阅此处了解更多信息:http://www.postgresql.org/docs/9.4/static/app-psql.html http://www.postgresql.org/docs/9.4/static/app-psql.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)