はじめに
psql
が環境変数としてパスが通っていないpgAdmin
が入っているWindows
の環境
上記の条件で、SQL
を一括で実行したいケースがあった。
これをやってみたので備忘録として残しておく。
環境
Windows 11 Professional
pgAdmin4 8.14
準備
SQLを一括実行するbatを作成する
gist
に置いたので gist
からのコードを貼っておく。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
REM psql.exe のパスを指定 | |
set PSQL="psql" | |
REM データベース名, ユーザー, パスワードを指定してください | |
SET HOST=localhost | |
SET PORT=5432 | |
set DATABASE=postgres | |
set USER=postgres | |
set PGPASSWORD=postgres | |
REM クライアントエンコーディングをUTF-8に設定 | |
set PGCLIENTENCODING=UTF8 | |
REM 実行するSQLファイルが格納されているフォルダのパスを指定してください | |
set SQL_FOLDER="C:\tmp" | |
REM フォルダ内のすべてのSQLファイルをループして実行 | |
for %%f in (%SQL_FOLDER%\*.sql) do ( | |
echo 実行中: %%f | |
%PSQL% -h %PGHOST% -p %PGPORT% -U %USER% -d %DATABASE% -f "%%f" | |
if errorlevel 1 ( | |
echo エラーが発生しました: %%f | |
pause | |
exit /b 1 | |
) | |
) | |
echo すべてのSQLファイルを実行しました。 | |
pause |
設定する変数は以下の通り。
各自の環境に合わせて設定すること。
変数名 | 値 | 説明 |
---|---|---|
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を実行するということをやってみた。
限定的なケースではあるがこういうケースもあるので記載しておく。