不使用ssh在远程计算机上执行postgresql查询

时间:2018-01-06 12:46:28

标签: linux bash postgresql ssh sh

我在从本地执行远程机器上的postgresql查询时遇到问题。

我在本地计算机上运行的Shell脚本:

[postgres@local:~]$ cat main.sh
#!/bin/bash
REMOTE="postgres@192.168.1.200"
PKEY="/home/postgres/pr-key.ppk"
SCRIPT_LOCATION=/home/postgres/scripts
CRONLOG_LOCATION=/home/postgres/project/cronlogs
PGBIN=/usr/pgsql-9.6/bin
PGUSER=postgres
PGDATA=/opt/PostgreSQL/9.6/data
PGDATABASE=postgres
PGPORT=5432
PGHOST=192.168.1.200
BLOG=/home/postgres/blogfile
query=`ssh -i $PKEY $REMOTE $PGBIN/psql -U $PGUSER -h $PGHOST -p $PGPORT -d $PGDATABASE -Atc "select datname from pg_database where datname not in ('template0','template1');"`
echo $query

执行:

[postgres@local:~]$ ./main.sh
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `/usr/pgsql-9.6/bin/psql -U postgres -h 192.168.1.200 -p 5432 -d postgres -Atc select datname from pg_database where datname not in ('template0','template1');'

2 个答案:

答案 0 :(得分:1)

ssh允许您运行存储在远程计算机上运行的ssh客户端上的脚本文件,就好像它实际位于远程计算机上一样,这使脚本编写更容易。如果你能让你的progree.sql.sh文件在本地环境中工作,那么

ssh user@hostname 'bash -s' < sql.script_on_this_machine.sh 

我使用密钥所以我不必担心这里的密码。

答案 1 :(得分:0)

我认为引号中的问题和... QUERY='"select datname from pg_database where datname not in ('\'template0\'', '\'template1\'');"' RESULT=$(ssh ... -Atc "${QUERY}") echo "${RESULT}" ... 字符串的引用解释。

尝试下一步:

{ "_id" : 1, 
"title" : "Prey", 
"developer" : "Arkane Studios", 
"publisherId" : 1, 
"year" : 2017, 
"gerne" : "Action" }