1

テーブルの列をチェックして、データがあるかどうかを確認するトリガーを作成する必要があります。トリガーは常に実行し、1 時間ごとに msg をログに記録する必要があります。

基本的に、結果が見つかった場合はselectステートメントを実行し、1時間スリープし、そうでない場合はログに記録し、1時間スリープします

4

2 に答える 2

2

あなたが望むのは、スケジュールされた仕事です。pgAgent : http://www.pgadmin.org/docs/1.4/pgagent.html は、その行をチェックし、必要に応じてログに記録する 1 時間ごとのジョブを作成します。

編集して追加: ジョブの代わりにテーブルを読み取ってオンザフライでログを生成する SQL スクリプトを作成することを検討したことがある場合は、興味があります。タイムスタンプ フィールドがある場合、その時間枠内に対応するエントリがないすべての時間帯を返すスクリプトを作成する可能性は十分にあります (タイムスタンプが更新されていないと仮定します)。データに対して直接ログを生成できるのに、2 つ目のログを保存する必要はありません。

于 2012-05-22T18:59:16.807 に答える
1

トリガー (pg および私が知っているすべての dbms) は、挿入、更新、または削除などのイベントの前後に実行できます。おそらくここで必要なのは、cronのようなもの(UNIX システムを使用している場合) を介して毎時間起動され、出力をログ ファイルにリダイレクトするスクリプトです。私はこのようなものを何度も使用しましたが、次のように聞こえました(Pythonで書かれています):

#!/usr/bin/python


import psycopg2
try:
    conn = psycopg2.connect("dbname='"+dbmane+"' user='"+user+"' host='"+hostname+"' password='"+passwd+"'")
except:
    # Get the most recent exception
    exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
    # Exit the script and print an error telling what happened.
    logging.debug("I am unable to connect to the database!\n ->%s" % (exceptionValue))
    exit(2)

cur = conn.cursor()

query = "SELECT whatever FROM wherever WHERE yourconditions"
try:
    cur.execute(query)
except ProgrammingError:
    print "Programming error, no result produced"
result = cur.fetchone()

if(result == None):
    #do whatever you need, if result == None the data is not in your table column

以前は 10 分ごとに cron を介してスクリプトを起動していましたが、1 時間ごとにスクリプトを起動して、その出力を選択したログ ファイルにリダイレクトするように簡単に設定できます。

Windows 環境で作業している場合は、cron のようなものを探します。トリガーがこれに役立つとは思いません。トリガーはいくつかのイベントの後にのみ起動します(トリガーを使用して、挿入されたデータが1時間ごとにチェックしたいデータであるかどうかを挿入ごとにチェックできますが、同じではありません) 、私の経験では、スクリプトを介して行うのが最善の解決策です)

于 2012-05-22T19:03:43.410 に答える