错误语法(从shell脚本执行psql查询)

时间:2013-02-03 20:02:17

标签: postgresql 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

修改语法的任何提示?

2 个答案:

答案 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)