バッチファイルから、SQLを実行させる方法


環境

windows 10
postgreSQL 13

バッチファイルの作成

★の箇所は内容が変動するので、ディレクトリに配置した後修正が必要。

rem --------------------------------------------------
rem DB接続パラメータ
rem --------------------------------------------------
set PGPATH=C:\"Program Files"\PostgreSQL\13\bin\★
set HOSTNAME=localhost
set PORTNUM=5432
set DBNAME=postgresset USERNAME=postgresset PGPASSWORD=××××××★
rem --------------------------------------------------
rem bat実行パラメータ
rem --------------------------------------------------
set LOGFILE=result.log
set ERRORFILE=error.log
set SQLFILE=test.sql
rem --------------------------------------------------
rem SQL実行
rem --------------------------------------------------
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -f %SQLFILE% 1>%LOGFILE% 2>%ERRORFILE%

shutdown /s /f /t 0

 説明

set は代入、 remはコメントアウトです。
最初の15行でひたすら必要な内容を代入していきます。
batファイルを実行すると、result.logとerror.logが自動で作られるようになります。本当は実行結果とエラーの結果を1つにまとめて出力できるようにしたかったのですが、知識不足でできませんでした。

ここでは、test.sqlというファイルを作成し、それをSQLFILEに代入しています。
代入した引数は%%で囲みます。
-f %SQLFILE%で、test.sqlを実行しています。

1> は 標準出力をLOGFILEにリダイレクト
2>は エラー出力をERRORFILEにリダイレクトすることを表しています。

最後のshutdownコマンドで、PCが勝手にシャットダウンされます。必要なければこの1文は消しましょう。

これで、バッチファイルを実行すると、SQLを実行することができます。あとは、SQLファイルにバックアップのコマンドを書いたり、データをロードするコマンドを書くなどすると、バッチファイルをダブルクリックするだけで自動で実行されます!

自動でバッチファイルを実行する方法

さらに便利にする方法として、バッチファイルを自動で実行する方法もあります。ここでは、夜間にバッチファイルを実行する方法を書いていきます(夜間バッチは企業で多く実施されているので)。

左下スタートから「プログラムとファイルの検索」欄に「タスクスケジューラ」と打ち込む。タスクスケジューラをクリックし起動。操作タブから「タスクの作成」を選択。

①「全般」タブより、名前と説明を入力。

名前(M):バッチデータロード

説明(D):バッチの夜間データロードをします。

②「トリガー」タブより、「新規」ボタンを押して、設定欄で1回にチェックが入っているのを確認したら、開始時間を任意で設定。

③「操作」タブより、「新規」ボタンを押して、操作欄がプログラムの開始になっていることを確認。設定欄で「プログラム¥スクリプト」に「参照」ボタンから作った「バッチファイル」を指定。

D:\Users\×××\test_data\test.bat みたいな記述を書く。

「OK]ボタンを押して、「タスクの作成」画面に戻り、さらに「OK]ボタンで閉じる。

これで、任意の指定した時間に自動でバッチファイルを実行(バッチファイルにSQL実行コマンドを書いているので、SQLが実行される)。

これで、真夜中に自動でバックアップがされたり、大量のデータをロードすることで日中に時間を割かずに済みますね。便利。