为了账号安全,请及时绑定邮箱和手机立即绑定

如何在psql中使用脚本变量?

如何在psql中使用脚本变量?

HUWWW 2019-10-08 14:40:31
在MS SQL Server中,我创建了脚本以使用可自定义的变量:DECLARE @somevariable int  SELECT @somevariable = -1INSERT INTO foo VALUES ( @somevariable )然后,我将@somevariable在运行时更改值,具体取决于在特定情况下所需的值。由于它位于脚本的顶部,因此很容易看到和记住。如何使用PostgreSQL客户端执行相同的操作psql?
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

Postgres变量是通过\ set命令创建的,例如...


\set myvariable value

...,然后可以替换为...


SELECT * FROM :myvariable.table1;

... 要么 ...


SELECT * FROM table1 WHERE :myvariable IS NULL;

编辑:从psql 9.1开始,变量可以用引号引起来,如下所示:


\set myvariable value 


SELECT * FROM table1 WHERE column1 = :'myvariable';

在旧版本的psql客户端中:


...如果要将变量用作条件字符串查询中的值,例如...


SELECT * FROM table1 WHERE column1 = ':myvariable';

...那么您需要在变量本身中包含引号,因为上述内容将无法正常工作。而是这样定义您的变量...


\set myvariable 'value'

但是,如果像我一样,您遇到了要从现有变量中创建字符串的情况,我发现窍门就是...


\set quoted_myvariable '\'' :myvariable '\''

现在,您同时具有相同字符串的带引号和不带引号的变量!而且你可以做这样的事情....


INSERT INTO :myvariable.table1 SELECT * FROM table2 WHERE column1 = :quoted_myvariable;


查看完整回答
反对 回复 2019-10-08
?
暮色呼如

TA贡献1853条经验 获得超9个赞

关于PSQL变量的最后一句话:


如果将它们用SQL语句括在单引号中,它们将不会扩展。因此,这不起作用:


SELECT * FROM foo WHERE bar = ':myvariable'

要在SQL语句中扩展为字符串文字,必须在变量集中包括引号。但是,变量值已经必须用引号引起来,这意味着您需要第二组引号,并且必须对内部引号进行转义。因此,您需要:


\set myvariable '\'somestring\''  

SELECT * FROM foo WHERE bar = :myvariable

编辑:从PostgreSQL 9.1开始,您可以改写:


\set myvariable somestring

SELECT * FROM foo WHERE bar = :'myvariable'


查看完整回答
反对 回复 2019-10-08
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

专门针对psql,您也可以psql从命令行传递变量。你可以通过他们-v。这是一个用法示例:


$ psql -v filepath=/path/to/my/directory/mydatafile.data regress

regress=> SELECT :'filepath';

               ?column?                

---------------------------------------

 /path/to/my/directory/mydatafile.data

(1 row)

注意,冒号未加引号,然后变量名称“ self”被加引号。我知道语法很奇怪。这仅在psql中有效;(例如)PgAdmin-III无法使用。


这种替换发生在psql的输入处理期间,因此您不能(说)定义一个函数,该函数使用:'filepath'并期望在:'filepath'会话之间更改的值。定义函数后,它将被替换一次,之后将是一个常量。这对于脚本编写很有用,但对运行时不起作用。


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 1268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信