0

我得到这个查询想要在我的第二台服务器上远程执行并且

#!/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

修复语法的任何提示?

4

2 回答 2

0

有不止一个问题

而不是 SQL 查询中的引号,您可以使用 $$

postgres=# select interval $$90 min$$;
 interval 
──────────
 01:30:00
(1 row)
于 2013-02-03T20:07:49.127 回答
0

使用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 命令行。

顺便说一句,我将from testdb.user, 更改为FROM user,我认为您没有名为“testdb”的模式。

于 2013-02-03T20:25:46.647 回答