在远程postgres数据库上执行查询时面临Shell中的问题

时间:2016-09-30 05:00:19

标签: shell

我在我的App服务器上运行一个shell脚本,该脚本将在安装了Postgres数据库的另一台机器上运行。它将执行查询并返回一对ID并存储到变量中。请在下面找到我的shell脚本。

ssh root@<Remote_HOST> 'bash -s'<< EOF 
projectid=`/usr/pgsql-9.4/bin/psql $DB_NAME -U $DB_USER -h $DB_HOST -t -c "select projectid from projects where project_Name='$projectName';"`
scenarioid=`/usr/pgsql-9.4/bin/psql $DB_NAME -U $DB_USER -h $DB_HOST -t -c  "select scenarioid from scenarios where scenario='$scenario' and projectid='$projectid';"`
EOF
echo $projectid

如果我执行Shell,我会收到以下错误:     /root/test/data.sh:line 62:/usr/pgsql-9.4/bin/psql:没有这样的文件或目录     /root/test/data.sh:line 62:/usr/pgsql-9.4/bin/psql:没有这样的文件或目录

但是在安装了数据库的机器上,如果我执行相同的查询,我会得到正确的结果。所以我不确定是什么问题,查询很好,目录存在。即使在SSH到远程主机之后,如果我执行ls或pwd,我也会获得正确的输出。我已经导出了数据库密码,所以没有密码的数据库登录已经正常工作了。

有些人可以告诉我,我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

最后,我能够通过在Shell中进行更改来解决我的问题

projectid=$(ssh root@<Remote_HOST> << EOF 
/usr/pgsql-9.4/bin/psql $DB_NAME -U $DB_USER -h $DB_HOST -t -c "select projectid from projects where project_Name='$projectName';"
EOF)
scenarioid=$(ssh root@<Remote_HOST> << EOF
/usr/pgsql-9.4/bin/psql $DB_NAME -U $DB_USER -h $DB_HOST -t -c "select scenarioid from scenarios where scenario='$scenario' and     projectid='$projectid';"
EOF)
echo "$projectid : $scenarioid"