在 MS SQL Server 中,我创建脚本以使用可自定义的变量:
DECLARE @somevariable int SELECT @somevariable = -1 INSERT INTO foo VALUES ( @somevariable )
然后,我将在运行时更改 的值@somevariable,具体取决于我在特定情况下想要的值。由于它位于脚本的顶部,因此很容易查看和记住。
@somevariable
我如何对 PostgreSQL 客户端做同样的事情psql?
psql
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;