2013-02-03 75 views
0

我得到这个查询要远程我的第二个服务器上执行,并错误语法(从shell脚本执行psql的查询)

#!/bin/bash 
QUERY=`psql -h my2ndserverip -d testdb -U testuser 'select count(*) as result 
from testdb.user where last_logged_date > (clock_timestamp() -interval '90 minutes) 
echo "users = $QUERY" > tmp.txt 

任何技巧来解决语法?

+0

除了引号? –

+0

不知道它的唯一引号 –

+0

当然,但这将是一个**优秀的**开始。 –

回答

1

使用此文件(Here文档保存行情,让壳变托换,由如图所示参数90其中使用单引号)内:

#!/bin/bash 

limit=${1:-90} 

psql -h my2ndserverip -d testdb -U testuser -t -A <<EOFEOF > tmp.txt 
    SELECT count(*) AS result 
    FROM "user" 
    WHERE last_logged_date > clock_timestamp()-interval '${limit} minutes' 
    ; 
EOFEOF 

exitcode=$? 
result=`cat tmp.txt` 

echo "Limit=${limit} Exitcode=${exitcode} Result=${result}" 
#Eof 

我坐席假设您希望psql省略列标题等,因此我将-t -A标志添加到psql命令行。

顺便说一句我改变了from testdb.user,到FROM user,我不认为你有一个名为'testdb'的模式。

0

有不止一个问题

,而不是报价在SQL查询,您可以使用$$

postgres=# select interval $$90 min$$; 
interval 
────────── 
01:30:00 
(1 row) 
+0

但我正在shell脚本中运行我的查询,并将echo放到一个文件中 –

+0

是的,我知道,而且您的问题在嵌套不足的引号中。因此,使用$$代替嵌套引号。 'SELECT .. interval '90 ...缺少'缺少第二个'.. --->'SELECT interval $$ 90 minutes $$' –