我有一个名为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'
答案 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语句运行。