はじめに
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を実行するということをやってみた。
限定的なケースではあるがこういうケースもあるので記載しておく。