【PostgreSQL】バッチファイルから直接SQLを実行する【BAT】
バッチファイルの中にSQLを記述してSQLを実行します。
バッチファイルだけでSQLの実行まで完結します。
実行方法
①バッチファイルの実行オプションにSQLを記述し、結果を外部ファイルに出力する
②バッチファイルの実行オプションにSQLを記述し、結果をCSV形式で出力する
②バッチファイルの実行オプションにSQLを記述し、結果をCSV形式で出力する
各種設定
データベース設定
データベース名:postgres
テーブル名:test_table
ユーザー名:postgres
テーブル設定
こちらで作成したものを使用します:【SQL】サンプルテーブルを作成するSQL
通常のSQL実行結果
select * from test_table where menu like '%tea';
【実行結果】menuが'tea'で終わる3レコードが選択されます。
menu | category | price | cal ----------------+----------+-------+----- Soy milk tea | drink | 360 | 88 Rooibos tea | drink | 250 | 2 Royal milk tea | drink | 350 | 116 (3 行)
①バッチファイルの実行オプションにSQLを記述し、結果を外部ファイルに出力する
バッチファイル概要
- -c オプションで " " 内にSQLを記述します
- like演算子に使用する%はエスケープのため %% と記述します
- -o オプションで外部ファイルの出力先を指定します
@echo off rem -------------------------------------------------- rem DB接続パラメータ rem -------------------------------------------------- set PGPATH=C:\"Program Files"\PostgreSQL\10\bin\ set HOSTNAME=localhost set PORTNUM=5432 set DBNAME=postgres set USERNAME=postgres set PGPASSWORD=postgres rem -------------------------------------------------- rem bat実行パラメータ rem -------------------------------------------------- set LOGFILE=result.log rem -------------------------------------------------- rem SQL実行 rem -------------------------------------------------- %PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "select * from test_table where menu like '%%tea';" -o %LOGFILE%
【実行結果】result.logに該当の3レコードが出力されます。
menu | category | price | cal ----------------+----------+-------+----- Soy milk tea | drink | 360 | 88 Rooibos tea | drink | 250 | 2 Royal milk tea | drink | 350 | 116 (3 行)
②バッチファイルの実行オプションにSQLを記述し、結果をCSV形式で出力する
バッチファイル概要
- "copy ("SQL文") to '出力パス' with csv delimiter ',' ;" のコマンドを記述します
- ここではさらにnullを空白にする、ヘッダを出力するを指定しています
@echo off rem -------------------------------------------------- rem DB接続パラメータ rem -------------------------------------------------- set PGPATH=C:\"Program Files"\PostgreSQL\10\bin\ set HOSTNAME=localhost set PORTNUM=5432 set DBNAME=postgres set USERNAME=postgres set PGPASSWORD=postgres rem -------------------------------------------------- rem bat実行パラメータ rem -------------------------------------------------- set FILEPATH=%~dp0 set SQLFILE=input.sql set LOGFILE=result.log set CSVFILE=result.csv rem -------------------------------------------------- rem SQL実行 rem -------------------------------------------------- %PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "copy (select * from test_table where menu like '%%tea') to '%FILEPATH%%CSVFILE%' with csv delimiter ',' null as '' header;"
【実行結果】result.logにヘッダと該当の3レコードがcsv形式で出力されます。
menu,category,price,cal Soy milk tea,drink,360,88 Rooibos tea,drink,250,2 Royal milk tea,drink,350,116
以上、バッチファイルからSQLを実行する方法でした。
参考書
ググっても見つからないものが、書籍ではさらっと書かれていたりします。
リンク
リンク
最近のコメント