postgresql – 如何引用传入psql的命名参数?

postgresql – 如何引用传入psql的命名参数?,第1张

概述psql有一个用于传递命名参数的构造: psql -v name='value' 然后可以在脚本中引用它: SELECT :name; 这将给出结果 ?column?---------- value(1 row) 在开发过程中,我需要相当频繁地删除并重新创建数据库的副本,所以我正在尝试自动化该过程.所以我需要运行一个强制断开所有用户然后删除数据库的查询.但是这个 *** 作的数据库会有所不同,因此数 psql有一个用于传递命名参数的构造:
psql -v name='value'

然后可以在脚本中引用它:

SELECT :name;

这将给出结果

?column?---------- value(1 row)

在开发过程中,我需要相当频繁地删除并重新创建数据库的副本,所以我正在尝试自动化该过程.所以我需要运行一个强制断开所有用户然后删除数据库的查询.但是这个 *** 作的数据库会有所不同,因此数据库名称必须是一个参数.

问题是断开用户的查询需要一个字符串(WHERE pg_stat_activity.datname =’dbname’),丢弃的查询需要一个不带引号的标记(DROP DATABASE IF EXISTS dbname). (对不起.不知道该怎么称呼这种令牌.)

我可以在DROP查询中使用不带引号的命名参数,但在断开连接查询中引用命名参数会导致参数不被展开.即,我会得到字符串’:name’而不是字符串’value’.

有没有办法将不带引号的值转换为字符串或将字符串转换为DROP查询的不带引号的标记?我可以通过将断开连接和DROP查询放在单独的脚本中并将带有引号的参数传递给断开连接并且不带引号到DROP来解决它,但我更喜欢它们在同一个脚本中,因为它们实际上是两个步骤在一个过程中.

尝试:
WHERE pg_stat_activity.datname = :'name'

请注意单引号前的冒号位置.优秀的手册填写了细节here:

If an unquoted argument begins with a colon (:),it is taken as a psql
variable and the value of the variable is used as the argument
instead. If the variable name is surrounded by single quotes (e.g.
:’var’),it will be escaped as an sql literal and the result will be
used as the argument. If the variable name is surrounded by double
quotes,it will be escaped as an sql IDentifIEr and the result will be
used as the argument.

大胆强调我的.

总结

以上是内存溢出为你收集整理的postgresql – 如何引用传入psql的命名参数?全部内容,希望文章能够帮你解决postgresql – 如何引用传入psql的命名参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存