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