【Windows】「PostgresSQL」バッチファイルでまとめてコマンドを簡単に実行する方法!(コマンドプロンプトで実装!サンプルあり!)

目次

Postgresコマンドをbatファイルから実行するための準備

簡単にできます。まず、環境変数をセットします。
(次のセクションでコピペできる箇所があるので、こちらでは概要をまとめています。)

  • set PGPATH=”C:\Program Files\PostgreSQL\10\bin\”
    (postgres.exeが保管されているパスを参照。参照させないとpsqlコマンドが動きません。)
  • set HOSTNAME=localhost
    (ホスト名を設定。)
  • set PORTNUM=5432
    (ポートを設定。基本的には「5432」ポートが多い。)
  • set DBNAME=database
    (データベース名を設定。環境をチェックしましょう。)
  • set USERNAME=postgres
    (ユーザー名を設定。)
  • set PGPASSWORD=postgres
    (パスワードを設定。)

※set PGPATHが使えない場合は、WindowsのシステムでPATHを直接設定おく必要があります。
こちらの記事をチェックしてみてください。

実際に使ってみる

「%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c」の後ろに
実行したいSQL文を入れることで実行することができます。

REM --------------------------------------------------
REM DB接続パラメータ
REM --------------------------------------------------
set PGPATH="C:\Program Files\PostgreSQL\10\bin\"
set HOSTNAME=localhost
set PORTNUM=5432
set DBNAME=database
set USERNAME=postgres
set PGPASSWORD=postgres
REM --------------------------------------------------

%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "ここに実行したいSQL文を入れる!!"

pause

データ数のカウントをしたい場合は

データ数をカウントしたい場合には、「”SELECT COUNT(*) from スキーマ名.テーブル名;”」で記載します。
以下のようになります。

REM --------------------------------------------------
REM DB接続パラメータ
REM --------------------------------------------------
set PGPATH="C:\Program Files\PostgreSQL\10\bin\"
set HOSTNAME=localhost
set PORTNUM=5432
set DBNAME=database
set USERNAME=postgres
set PGPASSWORD=postgres
REM --------------------------------------------------


REM ########## データ数カウント ##########
ECHO "「scm01」スキーマの「logdata」「userdata」「adddata」テーブル数をカウントします。"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "SELECT COUNT(*) from scm01.logdata;"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "SELECT COUNT(*) from scm01.userdata;"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "SELECT COUNT(*) from scm01.adddata;"

pause

CSVデータで出力をしたい場合は

CSVデータを出力したい場合には、「”COPY (select * from スキーマ名.テーブル名) TO STDOUT WITH CSV …..」で記載します。以下のようになります。

REM --------------------------------------------------
REM DB接続パラメータ
REM --------------------------------------------------
set PGPATH="C:\Program Files\PostgreSQL\10\bin\"
set HOSTNAME=localhost
set PORTNUM=5432
set DBNAME=database
set USERNAME=postgres
set PGPASSWORD=postgres
REM --------------------------------------------------

REM ########## CSV出力 ##########
ECHO "「scm01」スキーマの「logdata」「userdata」「adddata」テーブルをCSVデータで出力します。"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "COPY (select * from scm01.logdata) TO STDOUT WITH CSV DELIMITER E'\t' FORCE QUOTE * NULL AS '' HEADER;" > "C:\Users\user01\Desktop\%date:~0,4%%date:~5,2%%date:~8,2%_logdata.csv"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "COPY (select * from scm01.userdata) TO STDOUT WITH CSV DELIMITER E'\t' FORCE QUOTE * NULL AS '' HEADER;" > "C:\Users\user01\Desktop\%date:~0,4%%date:~5,2%%date:~8,2%_userdata.csv"
%PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -c "COPY (select * from scm01.adddata) TO STDOUT WITH CSV DELIMITER E'\t' FORCE QUOTE * NULL AS '' HEADER;" > "C:\Users\user01\Desktop\%date:~0,4%%date:~5,2%%date:~8,2%_adddata.csv"

pause

ちなみに、「%date:~0,4%%date:~5,2%%date:~8,2%」の部分はその日の日付を表しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次