【PostgreSQL】バッチファイルからSQLを実行する【BAT】

BAT,CODE,PostgreSQL,データベース

バッチファイルの中にSQLを記述してSQLを実行します。

実行方法 ①オプションにSQLを記載して実行し、結果を外部ファイルに出力する
②オプションに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を実行する方法でした。

参考書

ググってダメなときに頼るもの。