postgres psql 尝试在 sql 脚本中传递参数时出错

postgres psql error trying to pass parameters in sql script

在 postgresql 中,我 psql 使用 -v 变量输入,我可以在 sql 文件中调用它。

例如 bash 脚本,它看起来像这样:

"$PSQL_HOME"/psql -h $HOST_NM     \
                      -p $PORT    \
                      -U postgres \
                      -v v1=    \
                      -f Test.sql
...
..

从 sql 文件中,它看起来像这样:

GRANT ALL ON TABLE mytable TO mra_dev_:v1;
GRANT ALL ON TABLE mytable TO mra_dev_:v1_load;

第一个语句有效,但第二个语句失败:

psql:Test.sql:472: ERROR: syntax error at or near ":"
LINE 1: GRANT ALL ON TABLE mytable TO mra_dev_:v1_load
                                              ^

我该如何解决这个问题?我可以为此使用某种转义或连接功能吗?

我的解决方法是在命令行上调用时将我需要的字符串添加到参数中,如下所示:

"$PSQL_HOME"/psql -h $HOST_NM     \
                      -p $PORT    \
                      -U postgres \
                      -v v1=    \
                      -v v2=$_load \
                      -f Test.sql

然后在 sql 文件中,更改为:

GRANT ALL ON TABLE mytable TO mra_dev_:v2;

现在有效。