Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

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
)

ログをファイルに出力したりするとするとより良いのかもしれませんがここまでとします。