PostgreSQLでSQLファイルをWindowsのbatで実行する
こんちわ、堀之内です。
先日リリース作業を行った際に、DBの変更が大量でsqlを全て流すのが面倒だったのでフォルダ内のsqlを流すbatを作ってみました。
実は、sqlファイルを実行するのは簡単でpsql.exeにファイルパスを渡してあげれば実行してくれます。
しかし、実行時に毎回パスワード入力を要求されるので、これを回避するために実行ユーザのホームディレクトリにpgpassファイルを配置します。
これが有るとパスワード要求無しでpsql.exeを実行する事ができるので先にpgpassファイルを作ってやります。
ユーザーのホームディレクトリは「%APPDATA%」で取得できます。
SET HOSTNAME=HostName SET PORT=5432 SET USERID=UserName SET PASSWD=UserPassWord SET DATABASE=DatabaseName IF NOT EXIST "%APPDATA%\postgresql\pgpass.conf" ( MKDIR "%APPDATA%\postgresql" ECHO %HOSTNAME%:%PORT%:*:%USERID%:%PASSWD% > "%APPDATA%\postgresql\pgpass.conf" )
後は指定フォルダ内の「.sql」をファイルを取得してループ実行してやります。
FOR /F "usebackq delims==" %%i IN (`DIR /B sql\*.sql`) DO ( psql.exe -h %HOSTNAME% -p %PORT% -d %DATABASE% -U %USERID% -f sql\%%i > log\%%i.log 2>&1 )
ログをファイルに出力したりするとするとより良いのかもしれませんがここまでとします。