PSQL 从文件执行命令,其中文件是根据传递的变量确定的
PSQL Execute Commands from a file, where the file is determined based on a passed variable
上周我问了一个非常相似的问题,有人回答了,这对我帮助很大。现在我有一个稍微不同的 psql question
我有一个连接到数据库的批处理脚本,并给它一个 sql 文件来执行 (myFirstSQLFile.sql
)。该脚本还传递了一个值为 test
.
的 env
变量
%PSQLCOMMAND% -h {server} -U {user} -d {dbname} -E -q -f myFirstSQLFile.sql -v env="test"
myFirstSQLFile.sql
有更多 psql 命令来执行其他 sql 文件,如下所示。
\i file1.sql;
\i file2.sql;
\i file3.sql;
我想做的是根据我传递给它的 env
变量的值执行文件中的某些行。
类似条件语句的东西,大概是这样的
\i file1.sql;
\i file2.sql;
\if :env = 'test'
\i file3.sql;
\else
\i file4.sql
\endif;
但是上面的方法不起作用,我不知道这是否与正确的语法相差甚远。
我已经尝试了很多东西,但到目前为止还没有任何效果。我对任何类型的解决方案都持开放态度,它不一定必须是 if 语句,比如是否可以从批处理脚本中将文件名作为变量传递,然后以某种方式在 sql 文件中执行它,这对我来说也是一个可以接受的解决方案。
您无法在 \if
中进行比较。这应该有效:
SELECT :'env' = 'test' AS is_test \gset
\if :is_test
\i file3.sql
\else
\i file4.sql
\endif
上周我问了一个非常相似的问题,有人回答了,这对我帮助很大。现在我有一个稍微不同的 psql question
我有一个连接到数据库的批处理脚本,并给它一个 sql 文件来执行 (myFirstSQLFile.sql
)。该脚本还传递了一个值为 test
.
env
变量
%PSQLCOMMAND% -h {server} -U {user} -d {dbname} -E -q -f myFirstSQLFile.sql -v env="test"
myFirstSQLFile.sql
有更多 psql 命令来执行其他 sql 文件,如下所示。
\i file1.sql;
\i file2.sql;
\i file3.sql;
我想做的是根据我传递给它的 env
变量的值执行文件中的某些行。
类似条件语句的东西,大概是这样的
\i file1.sql;
\i file2.sql;
\if :env = 'test'
\i file3.sql;
\else
\i file4.sql
\endif;
但是上面的方法不起作用,我不知道这是否与正确的语法相差甚远。
我已经尝试了很多东西,但到目前为止还没有任何效果。我对任何类型的解决方案都持开放态度,它不一定必须是 if 语句,比如是否可以从批处理脚本中将文件名作为变量传递,然后以某种方式在 sql 文件中执行它,这对我来说也是一个可以接受的解决方案。
您无法在 \if
中进行比较。这应该有效:
SELECT :'env' = 'test' AS is_test \gset
\if :is_test
\i file3.sql
\else
\i file4.sql
\endif