1. はじめに
pgAdminでバックアップやリストアを行うと、プロセスウォッチャーに pg_dump, pg_restore などの標準出力・標準エラー出力が記載される。ここに表示される内容が文字化けした。関連記事が少ないため、症状と原因を整理する。
2. 事象
検証環境
- Windows11 Pro 25H2
- PostgreSQL 18.0(公式インストーラ 64ビット)
- pgAdmin4 9.8(PostgreSQLに付属していたもの)
症状
文字化け無し
インストール直後に、PostgreSQLやpgAdminの設定を変更せずに、postgres のバックアップを行う。
プロセスウォッチャーを確認すると、文字化けしていなかった。
文字化けあり
pgAdmin のバイナリパス設定を次のように変更する。
| 設定 | データベースサーバ | バイナリパス |
|---|---|---|
| 変更前 | PostgreSQL18 | $DIR/../runtime |
| 変更後 | PostgreSQL18 | C:\Program Files\PostgreSQL\18\bin |
変更した設定を保存し、念のためpgAdminを再起動。
先ほどと同様に、postgres のバックアップを行う。
プロセスウォッチャーを確認すると、文字化けしていた。
3. 原因
上記より、バイナリパスによる出力文字コードの違いである。
具体的には、次のような違いであると推測できる。
| 項目 |
bin/ 配下 |
runtime/ 配下 |
|---|---|---|
| 内容 | PostgreSQL のバイナリ | pgAdmin のバイナリ |
| 実行環境 | Windows システムロケール依存 | pgAdmin 内部のランタイム依存 |
| 出力文字コード | CP932 | UTF-8 |
pgAdmin は出力を UTF-8 として処理しようとするため、文字コードの不一致で文字化けが発生した。
この症状が広く認知されていない(?)のは、文字コードの違いが影響する環境(ロケール設定が日本など)に限られるためと思われる。
4. 対処方法
現時点では、推奨できる対処方法が存在しない。
バイナリパスに $DIR/../runtime を設定している場合、外部の PostgreSQL のバックアップやリストアをするときに失敗することがある。そのため、バイナリパスに $DIR/../runtime を設定するのは、実用的な対処方法ではない。
ChatGPT にほかの対処方法があるか訊いたところ、環境変数を設定することで改善できるなどと回答が得られた。しかし、文字化けを環境変数で対応するというのも不自然な気がする。他のシステムにも影響を与えかねない設定の場合はなおさら。そのため、検証の必要も無いと判断。
5. まとめ
現状では、妥当な対処方法は無い。
GitHub の Issue にバグとして報告すれば、pgAdmin 側で改善してくれるかもしれない。

