在comand行中执行postgresql命令时,如何在文件中传递参数?

时间:2018-12-20 17:51:59

标签: postgresql plpgsql psql

我有一个名为insert_all.sql的文件,其中包含以下内容。这里的v1是要传递的参数。

 do $$
    begin
    delete from tabledetails where table_name = '$(v1)';
    end;
    $$;

我正在尝试使用以下命令在该文件(insert_all.sql)中执行查询。但这是行不通的。我的命令怎么了?如果错了,请给我建议。

psql.exe -U postgres -p 5454 -h 127.0.0.1 -d desk -f D:\insert_all.sql -v v1='statusTable'

1 个答案:

答案 0 :(得分:1)

变量选项适用于文件中的简单查询,但不适用于DO块内。一种选择是创建一个存储该变量的TEMP表,然后像这样使用它。

create temp table var_temp as select :'v1'::TEXT as var;
 do $$
    begin
    delete from tabledetails where table_name =(select var from var_temp) ;
    end;
 $$; 

psql.exe -U postgres -p 5454 -h 127.0.0.1 -d desk -f D:\insert_all.sql -v v1="statusTable"

如果没有任何其他需要使用DO块的操作,请考虑将删除操作作为纯SQL语句运行。