0

このクエリを2番目のサーバーでリモートで実行したいのですが、

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

ヒアドキュメントを使用します (ヒアドキュメントは引用符を保持し、単一引用符内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 に答える
0

複数の問題があります

SQL クエリで引用符の代わりに、$$ を使用できます

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