pgAdminでWindowsのbatを実行しSQLを一括で実行をする

はじめに

  • psqlが環境変数としてパスが通っていない
  • pgAdminが入っている
  • Windowsの環境

上記の条件で、SQLを一括で実行したいケースがあった。
これをやってみたので備忘録として残しておく。

環境

Windows 11 Professional
pgAdmin4 8.14

準備

SQLを一括実行するbatを作成する

gist に置いたので gistからのコードを貼っておく。

設定する変数は以下の通り。
各自の環境に合わせて設定すること。

変数名説明
PSQLpsqlPostgreSQLのクライアントツールpsql.exeのパスを指定する。
HOSTlocalhost接続するデータベースサーバーのホスト名を指定する。localhostはローカル環境。
PORT5432データベースサーバーのポート番号を指定する。デフォルトは5432。
DATABASEpostgres接続先のデータベース名を指定する。デフォルトはpostgres。
USERpostgresデータベースに接続するユーザー名を指定する。デフォルトはpostgres。
PGPASSWORDpostgres接続時に使用するパスワードを指定する。
PGCLIENTENCODINGUTF8クライアントエンコーディングを指定する。この場合、UTF-8を使用する。
SQL_FOLDER“C:\tmp”実行するSQLファイルが格納されているフォルダのパスを指定する。

注意点

  • PGCLIENTENCODINGUTF8として設定しているので、作成するbatファイルや適用するSQLはすべてUTF-8で作成していることを前提にしている。
    ShiftJISで作成しているのであれば、この指定は不要。

必要なSQLを格納する

作成した batから適用するSQLを指定の場所に格納する。
今回は、C:\tmpを指定しているので、この中にSQLrun.batを入れておく。
※各ファイルの文字コードはUTF-8であるものを格納すること。

手順

1. pgAdminを起動する

execute-windows-bat-01

2. PSQL Toolsを起動する

execute-windows-bat-02

3. PSQL TooolsでC:\tmpのディレクトリに移動する

# \q で抜ける
postgres=# \q

# cd C:\tmpで移動する
C:\Users\xxxxx\AppData\Local\Programs\pgAdmin 4\runtime> cd C:\tmp
ログ
C:\Users\xxxxx\AppData\Local\Programs\pgAdmin 4\runtime>"C:\Users\xxxxx\App
Data\Local\Programs\pgAdmin 4\runtime\psql.exe" "host=localhost port=5432 d
bname=postgres user=postgres sslmode=prefer connect_timeout=10" 2>>&1
psql (17.1, server 17.2 (Debian 17.2-1.pgdg120+1))
Type "help" for help.

postgres=# \q

C:\Users\xxxxx\AppData\Local\Programs\pgAdmin 4\runtime>cd C:\tmp

C:\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は A29A-D1A2 です

 C:\tmp のディレクトリ

2024/12/24  20:07    <DIR>          .
2024/12/24  20:22               342 debug_crud.sql
2024/12/24  20:23               602 run.bat
               2 個のファイル                 944 バイト
               1 個のディレクトリ  1,652,414,697,472 バイトの空き領域
execute-windows-bat-03

4. run.batを実行する

C:\tmp> run.bat
execute-windows-bat-04

C:\tmp 内にある *.sqlの拡張子が実行される。

おわりに

pgAdminだけ入っているけど、psqlを環境変数のパスに設定していない場合に一括でSQLを実行するということをやってみた。
限定的なケースではあるがこういうケースもあるので記載しておく。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。