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

标签 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 block 和 if 子句的更新查询,代码也能正常工作。

最佳答案

没有直接的方法,请查看 hacks 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)

关于sql - 如何使用 psql 命令行将参数传递给 .sql 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41632525/

相关文章:

node.js - 使用 Mongoose 在 Node js中连接多个mongo db数据库

sql - 插入到没有序列列的空表时出现重复键约束错误

mysql - 连接缓存的查询(sql、nosql 或地球上存在的任何查询)

即使输入匹配表中的数据,PHP 搜索引擎也不会返回任何结果

mysql - 将表连接在一起Mysql 3次

java - Android:如何动态添加TextView?

php - 编写控制面板脚本修改php文件

postgresql - 如何包装 record_out() 函数?

mysql - 将子查询结果添加到查询中

sql - Rails 3 与 PostgreSQL : Problem with 'update_all' in joined table