将变量传递到psql脚本

时间:2018-06-24 15:46:42

标签: bash postgresql variables psql

我已经搜索了一段时间,但似乎找不到确切的答案...我试图从终端运行psql脚本,同时将表变量名和​​另一个变量作为psql脚本。

BASH命令:

psql db1 -U user1 -f '/.../Desktop/.../sample.sql' -v table=pg2 -v v1="'2018-02-01'"; 

PSQL脚本:

SELECT count(*) FROM :table WHERE datekey = :v1;

以上工作。但是,我希望能够在脚本本身中将表名和其他变量转换为字符串,以便可以在定义的另一个函数中使用它。例如,我希望pg2的表名可以作为字符串'pg2'使用。与datekey变量类似的要求。这可能吗?我的观察是,只有在CRUD操作或WHERE子句中使用传递变量才可能。

2 个答案:

答案 0 :(得分:2)

我从您的问题中得到的是对bash中变量的误解。尝试以下脚本是否有帮助:

#!/bin/bash

user="user1"
sqlfile='/.../Desktop/.../sample.sql'
table='pg2'
v1="'2018-02-01'"

psql db1 -U "$user" -f "$sqlfile" -v table=$table -v v1="$v1"

答案 1 :(得分:1)

在Stack /其他站点上的其他答案之外,有一种相当简单的方法可以将其容纳在psql脚本本身中。例如,原始的BASH命令是:

psql db1 -U user1 -f '/.../Desktop/.../sample.sql' -v table=pg2 -v v1="'2018-02-01'"; 

...并且在脚本中,需要为plpgsql函数输入两个字符串参数,称为“ copyFunction”。通过将表名放在冒号后面的引号中,并保持第二个变量不变,可以实现此目的。如果需要,可以根据需要将第二个变量放在引号中。

SELECT copyfunction(:'table', :v1);