2013-02-03 88 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 $$' –