【PostgreSQL】バッチファイルからSQLファイルを読み込んで実行する

DB,PostgreSQL

DB設定内容

  • ユーザ名:postgres
  • データベース名:postgres
  • テーブル名:test_table

オプションでSQLファイルを実行し、実行結果を外部ファイルに出力する

バッチファイルの設定

  • 出力先はバッチファイルで指定する
  • -f オプションで実行するSQLファイルを指定する
  • -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 SQLFILE=input.sql
    set LOGFILE=result.log
    
    rem --------------------------------------------------
    rem SQL実行
    rem --------------------------------------------------
    %PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -f %SQLFILE% -o %LOGFILE%
    

SQLファイルの設定

  • ファイル名 input.sql

    select * from test_table;
    

実行結果をCSV形式で出力する場合

バッチファイルの設定

  • 出力先をバッチファイルで指定する
  • 出力形式はSQLファイルで指定する

    @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 SQLFILE=input.sql
    set CSVFILE=result.csv
    
    rem --------------------------------------------------
    rem SQL実行
    rem --------------------------------------------------
    %PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -f %SQLFILE% -o %CSVFILE%
    

SQLファイルの設定

  • ファイル名 input.sql
  • SQLを copy ()to stdout with csv delimiter ',' ; の中に記述する
  • ここでは出力先を標準出力、nullを空白、ヘッダ出力ありを指定している

    copy (
      select * from test_table
    ) to stdout with csv delimiter ',' null as '' header;
    

SQLファイルに出力パスまで記載する場合

バッチファイルの設定

  • バッチファイルで出力先の記述はしない

    @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 SQLFILE=input.sql
    
    rem --------------------------------------------------
    rem SQL実行
    rem --------------------------------------------------
    %PGPATH%psql -h %HOSTNAME% -p %PORTNUM% -d %DBNAME% -U %USERNAME% -f %SQLFILE%
    

SQLファイルの設定

  • ファイル名 input.sql
  • input.sql で出力先を指定する
  • 出力先は絶対参照で指定する

    copy (
      select * from test_table
    ) to 'D:\test\result.csv' with csv delimiter ',' null as '' header;
    

DB,PostgreSQL

Posted by junichi