2011-10-18 8 views
7

私は私が行うために必要なすべてがにされていることを前提としていますPostgres SQL関数を実行するためのcronジョブを作成するにはどうすればよいですか?

  1. 例えば、SQLファイルを作成します。 nameofsqlfile.sqlの内容:

    perform proc_my_sql_funtion();

  2. これをcronジョブとして実行します。

しかし、私は私が指定したホスト、ポート、データベース、ユーザー&自分のパスワードのためのPostgresの関数として実行され、このcronジョブを取得するために記述する必要があると思いますコマンドを知りませんか...?

答えて

10

から呼び出すbashスクリプトを作成することができますシェルコマンドを指定した時刻または時刻に実行します。

あなたの最初の仕事は、あなたのシェルコマンドの実行方法を理解することです。

psql --host host.example.com --port 12345 --dbname nameofdatabase < my.sql 

あなたはその後、ちょうどあなたのcrontabにこれを追加することができ、ここで「あなたはシェルでSQLソースのすべてを置くことができ、多くの場合

# runs your command at 00:00 every day 
# 
# min hour wday month mday command-to-run 
    0 0 *  * * psql --host host.example.com --port 12345 --dbname nameofdatabase < my.sql 
3

を(私はあなたが壊す事を避けるためにcrontab -eを使用することをお勧め)資料'。ヒアドキュメントのいいところは、シェルの$ {MY_VARが}も、単一引用符内を拡大しているということです、例えば:

#!/bin/sh 

THE_DATABASE=personnel 
MY_TABLE=employee 
THE_DATE_VARIABLE_NAME=hire_date 
THE_MONTH=10 
THE_DAY=01 

psql ${THE_DATABASE} <<THE_END 
    SELECT COUNT(*) FROM ${MY_TABLE} 
    WHERE ${THE_DATE_VARIABLE_NAME} >= '2011-${THE_MONTH}-${THE_DAY}'::DATE 
THE_END 

YMMV

関連する問題