はじめに
psqlが環境変数としてパスが通っていないpgAdminが入っているWindowsの環境
上記の条件で、SQLを一括で実行したいケースがあった。
これをやってみたので備忘録として残しておく。
環境
Windows 11 Professional
pgAdmin4 8.14準備
SQLを一括実行するbatを作成する
gist に置いたので gistからのコードを貼っておく。
設定する変数は以下の通り。
各自の環境に合わせて設定すること。
| 変数名 | 値 | 説明 |
|---|---|---|
| PSQL | psql | PostgreSQLのクライアントツールpsql.exeのパスを指定する。 |
| HOST | localhost | 接続するデータベースサーバーのホスト名を指定する。localhostはローカル環境。 |
| PORT | 5432 | データベースサーバーのポート番号を指定する。デフォルトは5432。 |
| DATABASE | postgres | 接続先のデータベース名を指定する。デフォルトはpostgres。 |
| USER | postgres | データベースに接続するユーザー名を指定する。デフォルトはpostgres。 |
| PGPASSWORD | postgres | 接続時に使用するパスワードを指定する。 |
| PGCLIENTENCODING | UTF8 | クライアントエンコーディングを指定する。この場合、UTF-8を使用する。 |
| SQL_FOLDER | “C:\tmp” | 実行するSQLファイルが格納されているフォルダのパスを指定する。 |
注意点
PGCLIENTENCODINGをUTF8として設定しているので、作成するbatファイルや適用するSQLはすべてUTF-8で作成していることを前提にしている。ShiftJISで作成しているのであれば、この指定は不要。
必要なSQLを格納する
作成した batから適用するSQLを指定の場所に格納する。
今回は、C:\tmpを指定しているので、この中にSQLとrun.batを入れておく。
※各ファイルの文字コードはUTF-8であるものを格納すること。
手順
1. pgAdminを起動する

2. PSQL Toolsを起動する

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 バイトの空き領域
4. run.batを実行する
C:\tmp> run.bat
※ C:\tmp 内にある *.sqlの拡張子が実行される。
おわりに
pgAdminだけ入っているけど、psqlを環境変数のパスに設定していない場合に一括でSQLを実行するということをやってみた。
限定的なケースではあるがこういうケースもあるので記載しておく。