我得到这个查询想要在我的第二台服务器上远程执行
#!/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 :(得分:1)
使用here文档(heredocuments保留引号并允许shell变量子句,如参数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命令行。
BTW我将from testdb.user
更改为FROM user
,我认为您没有名为'testdb'的架构。
答案 1 :(得分:0)
有多个问题
在SQL查询中引用,您可以使用$$
postgres=# select interval $$90 min$$;
interval
──────────
01:30:00
(1 row)