LinuxでデータベースServerを運用している場合、Cronを使って、時間指定で処理を実行する場面があります。
Cronの書き方、Shellの書き方 + 実行方法など別の記事で書くとして、データベース廻りのお話をします。
1)データベースにさせたい処理を関数で実現する。
使用する言語は ‘sql’ でも ‘PL/pgSQL’ でもかまいません。
機能面を考えると PL/gSQL が妥当と考えますが。。
2)作成した関数を起動するShellを作成する。または、Cron で PostgeSqlに直接コマンドを渡す。
ここでは、Cron で PostgeSqlに直接コマンドを渡します。
3)PostgeSqlに直接コマンドを渡す際、通常であればパスワードの入力を求められるので、ここを「自動化」する。
今回の記事はここがPOINT
では 1)の関数を作成後 ‘SELECT 関数名(引数)’で作成した関数が正常に想定したとおり動くことを確認しておきます。
次に、sshなどでコマンド
1 |
psql -h localhost -U user_name -d database_name -c "SELECT function_name(parameter);" |
と入力。
localhost :別サーバであればその IP
user_name :実行するユーザ名(スキーマ、作成した関数のオーナーと同じにしてください)
database_name :データベース名
function_name :作成した関数名
parameter :引数
です。
すると、通常であれば
ユーザ user_name のパスワード:
とパスワードを求められます。
このままでは、Cronで自動起動できませんので、Serverにパスワードの入力を省略してもらわないといけません。
まず、 user_name のホームディレクトリに移動
1 |
cd /home/user_name |
ここに .pgpass File を作成します
1 |
vi .pgpass |
作成したら実行ユーザ(user_name)だけが参照できるようにパーミッションを変更します
1 |
chmod 600 .pgpass |
パーミッションが 644 などだと、.pgpass は有効になりません。
内容は ホスト名:ポート番号:データベース名:ユーザ名:パスワード
たとえば、
1 |
localhost:5432:database_name:user_name:password |
でOK、psqlにLogInする際にパスワードを聞かれません。
もちろん登録していないuserでpsqlにloginする場合はパスワードを聞いてきます。