关于plpgsql:如何在命令行中执行postgresql命令时传递带文件的参数?

How to pass the parameter with the file while executing the postgresql command in the comand line?

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

1
2
3
4
5
 do $$
    BEGIN
    DELETE FROM tabledetails WHERE TABLE_NAME = '$(v1)';
    END;
    $$;

我试图使用下面给出的命令在该文件(insert_all.sql)中执行查询。 但它没有用。 我的命令出了什么问题? 如果是错的,请就此提出建议。

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


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

1
2
3
4
5
6
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;
 $$;
1
psql.exe -U postgres -p 5454 -h 127.0.0.1 -d desk -f D:\insert_all.sql -v v1="statusTable"

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