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

Postgresql 如何引用传入psql的命名参数?,postgresql,keyword,identifier,psql,Postgresql,Keyword,Identifier,Psql,具有用于传递命名参数的构造: psql -v name='value' 然后可以在脚本中引用: SELECT :name; 这将给出结果 ?column? ---------- value (1 row) 在开发过程中,我需要相当频繁地删除和重新创建数据库的副本,所以我正在尝试自动化这个过程。因此,我需要运行一个查询,强制断开所有用户的连接,然后删除数据库。但是它所操作的数据库会有所不同,因此数据库名称需要是一个参数 问题在于,断开用户连接的查询需要一个字符串(WHERE pg_sta

具有用于传递命名参数的构造:

psql -v name='value'
然后可以在脚本中引用:

SELECT :name;
这将给出结果

 ?column?
----------
 value
(1 row)
在开发过程中,我需要相当频繁地删除和重新创建数据库的副本,所以我正在尝试自动化这个过程。因此,我需要运行一个查询,强制断开所有用户的连接,然后删除数据库。但是它所操作的数据库会有所不同,因此数据库名称需要是一个参数

问题在于,断开用户连接的查询需要一个字符串(
WHERE pg_stat_activity.datname='dbname'
),而删除的查询需要一个不带引号的令牌(
DROP DATABASE IF EXISTS dbname
)。(对不起,不知道该怎么称呼这种代币。)

我可以在DROP查询中使用命名参数,但在disconnect查询中引用命名参数会导致参数无法展开。也就是说,我将得到字符串
':name'
,而不是字符串
'value'

对于DROP查询,是否有任何方法可以将不带引号的值转换为字符串或将字符串转换为不带引号的标记?我可以通过将disconnect和DROP查询放在单独的脚本中,并将带引号的参数传递给disconnect,将不带引号的参数传递给DROP来解决这个问题,但我更希望它们在同一个脚本中,因为它们实际上是一个过程中的两个步骤。

使用:

... WHERE pg_stat_activity.datname = :'name'
。。。其中pg_stat_activity.datname=:“name”
注意冒号在单引号前的位置。
:

如果出现后跟psql变量名的不带引号的冒号(
) 在参数中,它被变量的值替换,如下所示 如下文所述。表格
:“变量名”
:“变量名”
也描述了这些工作

要将变量的值作为SQL文本引用,请编写冒号 后跟单引号中的变量名


非常感谢。PostgreSQL的手册很有帮助。我就是找不到。要么我错过了,要么我不想看那一页(我太傻了)。