如何使用psql命令行将参数传递给.sql文件?

时间:2017-01-13 10:33:47

标签: sql database postgresql psql postgresql-9.6

我有一个bat文件,其下面有命令

"C:\Program Files (x86)\pgAdmin III\1.22\psql" -U postgres -h hostname -p 5432 -d TestDB -w -f 1.1.sql -v num_var=1.2

此命令调用文件1.1.sql,其中包含以下脚本

DO $$
Begin 

If Exists (Select * from pg_statio_user_tables where relname = 'applicationsetting' ) then
update applicationsetting set value = :num_var
where applicationsettingid = '32bdba3b-39f6-4e43-947e-0bfdd4f5d561';
End IF;

End $$;

点击bat文件时,我收到了this error

psql:1.1.sql:9: ERROR:  syntax error at or near ":"
LINE 4: update demo set keyvalue = :num_var

但是,如果我没有传递任何变量并在更新查询中使用静态值,则代码可以正常工作。

修改

如果我仅在没有DO块和if子句的情况下使用更新查询,

代码也可以正常工作。

1 个答案:

答案 0 :(得分:0)

没有直接的方法,请研究黑客herehere,例如:

准备:

db=# create table t (c int);
CREATE TABLE
db=# insert into t values (0);
INSERT 0 1

您的工作更新:

db=# \set num_var 1
db=# update t set c = :num_var;
UPDATE 1
db=# table t;
 c
---
 1
(1 row)

立即破解“嵌套引用”:

db=# \set num_var 2
db=# \set hack 'begin update t set c = ':num_var'; end';
db=# do :'hack';
DO
db=# table t;
 c
---
 2
(1 row)