目次
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を直接設定おく必要があります。
こちらの記事をチェックしてみてください。
PATHを設定する
PostgreSQL へコマンドプロンプトから接続する場合には PATH を設定しておくと便利です。ここでは PostgreSQL の環境で 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%」の部分はその日の日付を表しています。