PSQL 传递外部变量
PSQL passing external variables
我正在尝试将 value/variable 从批处理脚本传递到 SQL 脚本,但我遇到了问题。
代码流程如下:
从我的批处理脚本开始,我调用了一个引用 myFirstSQLFile.sql
的 psql 命令调用,并将 env
作为值为 test
[=26 的变量传递=]
%PSQLCOMMAND% -h {server} -U {user} -d {dbname} -E -q -f myFirstSQLFile.sql -v env="test"
在我的 myFirstSQLFile.sql
中,它引用了许多其他 sql 文件,但为了简单起见,我只显示一个。正是在这个文件中,我知道我可以使用 :env
访问我的 env
变量
\i myLastSQLFile.sql;
在 myLastSQLFile.sql
中,我有 sql 代码用于使用外部 env
var 进行条件语句,如下所示
DO
$do$
BEGIN
IF :env = 'test' THEN
# Do Something
END IF;
END
$do$
我知道在那些 $do$
标签之外,我可以使用符号 :env
访问我的变量,但是在它们内部我不能。我不太明白 $do$
标签或 BEGIN/END
块的用途,if/how 我可以在其中访问我的 env
变量。
A DO
statement 执行匿名代码块。 “$do$ 标签” 是 dollar-quotes。请先阅读此内容以了解:
- What are '$$' used for in PL/pgSQL
BEGIN
和 END
是 PL/pgSQL code block 的修饰符 - 这是 DO
语句的默认 PL(编程语言)。
psql 不插入变量 inside quoted SQL literals and identifiers.
一种 解决问题的方法是使用 Postgres 字符串处理,然后使用 \gexec
执行结果。来自 psql:
SELECT format($$
DO
$do$
BEGIN
IF %L = 'test' THEN
-- do something
END IF;
END
$do$;
$$, :'env')\gexec
还有其他各种方式。也许一个(临时)函数可以更好地为您服务:您可以将参数传递给它。以全图为准
请参阅 dba.SE 上一个非常相似的问题的答案:
我正在尝试将 value/variable 从批处理脚本传递到 SQL 脚本,但我遇到了问题。
代码流程如下:
从我的批处理脚本开始,我调用了一个引用 myFirstSQLFile.sql
的 psql 命令调用,并将 env
作为值为 test
[=26 的变量传递=]
%PSQLCOMMAND% -h {server} -U {user} -d {dbname} -E -q -f myFirstSQLFile.sql -v env="test"
在我的 myFirstSQLFile.sql
中,它引用了许多其他 sql 文件,但为了简单起见,我只显示一个。正是在这个文件中,我知道我可以使用 :env
env
变量
\i myLastSQLFile.sql;
在 myLastSQLFile.sql
中,我有 sql 代码用于使用外部 env
var 进行条件语句,如下所示
DO
$do$
BEGIN
IF :env = 'test' THEN
# Do Something
END IF;
END
$do$
我知道在那些 $do$
标签之外,我可以使用符号 :env
访问我的变量,但是在它们内部我不能。我不太明白 $do$
标签或 BEGIN/END
块的用途,if/how 我可以在其中访问我的 env
变量。
A DO
statement 执行匿名代码块。 “$do$ 标签” 是 dollar-quotes。请先阅读此内容以了解:
- What are '$$' used for in PL/pgSQL
BEGIN
和 END
是 PL/pgSQL code block 的修饰符 - 这是 DO
语句的默认 PL(编程语言)。
psql 不插入变量 inside quoted SQL literals and identifiers.
一种 解决问题的方法是使用 Postgres 字符串处理,然后使用 \gexec
执行结果。来自 psql:
SELECT format($$
DO
$do$
BEGIN
IF %L = 'test' THEN
-- do something
END IF;
END
$do$;
$$, :'env')\gexec
还有其他各种方式。也许一个(临时)函数可以更好地为您服务:您可以将参数传递给它。以全图为准
请参阅 dba.SE 上一个非常相似的问题的答案: