首页 > 解决方案 > 将变量传递给 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 子句中使用时才能传递变量。

标签: bashpostgresqlvariablespsql

解决方案


从我从您的问题中得到的信息是对 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"

推荐阅读