MEMO blog

主に自分用のメモです

指定したフォルダ内にある複数のSQLを実行するbat(PostgreSQL)

たぶんこれでいいはず。

2017/4/11追記: カレントディレクトリが移動したまんまになっていたので終了前に戻すよう修正

@echo off
pushd %~dp0

rem ---------------------------------------------
rem [PostgreSQL]
rem 指定したフォルダ内にある複数のSQLを実行する
rem "Syntax: this_bat <db_name> <input_dir>"
rem -%1 ... db_name: SQLを実行するDB名称
rem -%2 ... input_dir: 入力ディレクトリ(SQLがあるディレクトリ)
rem ---------------------------------------------

rem Check args
IF "%1"=="" ( goto END_ARG_ERROR )
IF "%2"=="" ( goto END_ARG_ERROR )

rem DB接続情報
set USERID=postgres
set DBNAME=%~1
set HOST=localhost
set PORT=5432

rem SQLがあるフォルダの指定
set input_dir=%~2
IF NOT EXIST %input_dir% (
    echo input_directory does not exist...
    goto END_ARG_ERROR
)

rem PostgreSQLへ接続 & %input_dir%にある全SQL実行
pushd %input_dir%
echo Executing SQL...
for %%i in (*.sql) do (
    psql -h %HOST% -p %PORT% -U %USERID% -d %DBNAME% -f %%i
)

echo Done...
goto END_STD

rem 正常終了------------------------------------
:END_STD
    pushd %~dp0
    pause
    exit /b

rem 異常終了(引数異常)------------------------------------
:END_ARG_ERROR
    echo "Arg error."
    echo "Syntax: this_bat <db_name> <input_dir>"
    pause
    exit /b