-
2025-10-20 PostgreSQLPostgreSQL ナレッジ
PostgreSQLのメッセージを日本語化する方法
はじめに
本記事では、PostgreSQL のメッセージを日本語化する方法について確認した内容を説明します。
ソースコードからインストールした PostgerSQL では、出力されるメッセージは英語となっていますので、それを日本語化する際の方法を説明します。
環境
- Ubuntu 24.04
- PostgreSQL 17.6(ソースコードからインストール)
日本語化に必要な対応
メッセージには「クライアントのロケール設定に制御されてるメッセージ」と「PostgreSQL が管理しているメッセージ」があります。
クライアントのロケール設定に制御されているメッセージの日本語化
psql や pg_ctl などを実行した際に、データベースへ接続する前に発生するエラーメッセージなどが該当します。
これらのメッセージは、クライアント環境の OS が管理するロケール設定によって制御されています。
具体的には、環境変数 LANG と LC_MESSAGES が該当します。
この LANG および LC_MESSAGES に日本語用のロケールを設定することで、クライアントのロケール設定に制御されているメッセージを日本語化できます。
具体例を下記に記載します。
export LANG=ja_JP.UTF-8
export LC_MESSAGES=ja_JP.UTF-8
上記の設定をしても日本語化されない場合、OS に日本語ロケールがインストールされていない可能性があります。
利用可能なロケールは
locale -a
で確認できますので、結果内に日本語ロケールが含まれているかを確認してください。
もし、利用できるロケールの中に ja_JP.UTF-8 などの日本語ロケールが存在しない場合、インストールが必要です。
実際に確認
実際に PostgreSQL を操作して挙動を確認します。
export LANG=C
export LC_MESSAGES=C
クライアントのロケール設定を C ロケールにします。
$ psql -U test_user -d test_db -p 5432
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
C ロケールの状態では、出力されるメッセージは英語となることを確認できました。
export LANG=ja_JP.UTF-8
export LC_MESSAGES=ja_JP.UTF-8
クライアントのロケール設定を日本語ロケール( ja_JP.UTF-8 )にします。
$ psql -U test_user -d test_db -p 5432
psql: エラー: ソケット"/tmp/.s.PGSQL.5432"のサーバーへの接続に失敗しました: そのようなファイルやディレクトリはありません
サーバーはローカルで稼働していてそのソケットで接続を受け付けていますか?
接続時のエラーメッセージが日本語で表示されるようになりました。
これは、psql が PostgreSQL に接続する前に発生したエラーメッセージなので、クライアントのロケール設定によって出力言語が制御されたためです。
PostgreSQL が管理しているメッセージの日本語化
今度は PostgreSQL が管理しているメッセージを日本語化する方法を確認します。
PostgreSQL が管理しているメッセージを日本語化するには、以下の 2 つの対応が必要です。
- configure スクリプトに --enable-nls オプションをつけて実行する。
- lc_messages パラメータに ja_JP.UTF-8 などの日本語ロケールを設定する。
詳細を後述します。
configure スクリプトに --enable-nls オプションをつけて実行する。
PostgreSQL をソースコードからインストールする際に、configure → make → make install という流れになります。
この configure スクリプトの実行時に --enable-nls オプションをつけることで、PostgreSQL を日本語化できるようになります。
具体的には下記のように実行します。
./configure --enable-nls
なお、--enable-nls オプションをつける場合、gettext パッケージのインストールが必要です。
gettext パッケージがインストールされていない場合、スクリプト実行時に下記のエラーが発生します。
configure: error: msgfmt is required for NLS
※
既存の PostgreSQL で、--enable-nls をつけていない場合には、configure スクリプトの実行からやり直しとなります。
その場合、configure の前に make clean をしておくと安心です。
lc_messages に ja_JP.UTF-8 などの日本語ロケールを設定する。
無事にインストールが完了しましたら、データベースの lc_messages パラメータを日本語ロケールを設定します。
具体的には、postgresql.conf 内の lc_messages = C という記述を lc_messages = ja_JP.UTF-8 に修正します。
※すでに起動しているデータベースに対して、設定を反映させるには再読み込み( pg_ctl reload )が必要です。
実際に確認
実際に PostgreSQL を操作して挙動を確認します。
まずは日本語化対応前の挙動を確認します。
$ grep "lc_messages" 17.6/postgresql.conf
lc_messages = C # locale for system error message
lc_messages は C ロケールであることを確認しました。
$ pg_ctl start -D db_clusters/17.6
waiting for server to start....2025-09-24 10:24:54.099 UTC [1054761] LOG: starting PostgreSQL 17.6 on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit
2025-09-24 10:24:54.101 UTC [1054761] LOG: listening on IPv6 address "::1", port 5432
2025-09-24 10:24:54.101 UTC [1054761] LOG: listening on IPv4 address "127.0.0.1", port 5432
2025-09-24 10:24:54.104 UTC [1054761] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2025-09-24 10:24:54.113 UTC [1054764] LOG: database system was shut down at 2025-09-23 07:11:20 UTC
2025-09-24 10:24:54.125 UTC [1054761] LOG: database system is ready to accept connections
done
server started
PostgreSQL の起動メッセージは、C ロケールですので英語となっています。
今度は、日本語化対応した状態の挙動を確認します。
$ grep "lc_messages" 17.6/postgresql.conf
lc_messages = 'ja_JP.UTF-8' # locale for system error message
lc_messages には、日本語ロケールが設定されていることを確認しました。
$ pg_ctl start -D 17.6
サーバーの起動完了を待っています....2025-09-24 11:25:16.819 JST [94654] LOG: PostgreSQL 17.6 on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit を起動しています
2025-09-24 11:25:16.819 JST [94654] LOG: IPv6アドレス"::1"、ポート5432で待ち受けています
2025-09-24 11:25:16.819 JST [94654] LOG: IPv4アドレス"127.0.0.1"、ポート5432で待ち受けています
2025-09-24 11:25:16.824 JST [94654] LOG: Unixソケット"/tmp/.s.PGSQL.5432"で待ち受けています
2025-09-24 11:25:16.832 JST [94657] LOG: データベースシステムは 2025-09-24 11:25:10 JST にシャットダウンしました
2025-09-24 11:25:16.836 JST [94654] LOG: データベースシステムの接続受け付け準備が整いました
完了
サーバー起動完了
無事にメッセージが日本語になりました。
文字化け
クライアントが C ロケールで PostgreSQL が日本語ロケールの場合、文字化けが発生することに注意してください。
簡単に表にすると下記のようになります。
クライアントのロケール | PostgreSQL の lc_messages | 文字化け |
---|---|---|
C | C | しない |
C | 日本語 | する |
日本語 | C | しない |
日本語 | 日本語 | しない |
実際に確認
挙動を確認します。
export LANG=C
export LC_MESSAGES=C
クライアントのロケール設定を C ロケールにします。
$ grep "lc_messages" 17.6/postgresql.conf
lc_messages = ja_JP.UTF-8 # locale for system error message
PostgreSQL の lc_messages は日本語ロケールであることを確認しました。
この状態で PostgreSQL を起動します。
$ pg_ctl start -D 17.6
waiting for server to start....2025-09-24 11:28:54.412 JST [94699] LOG: PostgreSQL 17.6 on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit ????????
2025-09-24 11:28:54.413 JST [94699] LOG: IPv6????"::1"????5432?????????
2025-09-24 11:28:54.413 JST [94699] LOG: IPv4????"127.0.0.1"????5432?????????
2025-09-24 11:28:54.420 JST [94699] LOG: Unix????"/tmp/.s.PGSQL.5432"?????????
2025-09-24 11:28:54.426 JST [94702] LOG: ??????????? 2025-09-24 11:28:50 JST ????????????
2025-09-24 11:28:54.430 JST [94699] LOG: ?????????????????????????
done
server started
PostgreSQL からは日本語(UTF-8)でメッセージを返しますが、それを表示するクライアント側のロケールが C ロケールなため、UTF-8 出力を解釈できずに文字化けしてしまいます。
となります。
日本語と英語が混在
余談ですが、クライアントを日本語ロケール、PostgreSQL を C ロケールにすると、一部のメッセージだけ日本語になります。
こちらも実際に挙動を確認します。
export LANG=ja_JP.UTF-8
export LC_MESSAGES=ja_JP.UTF-8
クライアントのロケール設定を日本語ロケール( ja_JP.UTF-8 )にします。
$ grep "lc_messages" 17.6/postgresql.conf
lc_messages = C # locale for system error message
PostgreSQL のロケールは C ロケールであることを確認しました。
この状態で PostgreSQL を起動してみます。
$ pg_ctl start -D 17.6
サーバーの起動完了を待っています....2025-09-24 16:39:02.602 JST [95825] LOG: starting PostgreSQL 17.6 on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit
2025-09-24 16:39:02.603 JST [95825] LOG: listening on IPv6 address "::1", port 5417
2025-09-24 16:39:02.603 JST [95825] LOG: listening on IPv4 address "127.0.0.1", port 5417
2025-09-24 16:39:02.607 JST [95825] LOG: listening on Unix socket "/tmp/.s.PGSQL.5417"
2025-09-24 16:39:02.615 JST [95828] LOG: database system was shut down at 2025-09-24 16:34:21 JST
2025-09-24 16:39:02.624 JST [95825] LOG: database system is ready to accept connections
完了
サーバー起動完了
上記の通り、PostgreSQL が出力するメッセージは英語となり、クライアントのロケールによって制御されるメッセージは日本語となっています。
まとめ
以上が PostgreSQL のメッセージを日本語化するための方法となります。
PostgreSQL のメッセージを日本語化するためには、クライアント側と PostgreSQL 側のロケール設定を適切に行うことが重要だと確認できました。
特に configure スクリプトに --enable-nls オプションをつけ忘れると、インストールのやり直しが必要となりますので、気をつけたいところです。
基本的には英語で運用することで問題ないと思いますが、ユーザの要望によってはメッセージを日本語にしたいケースもあるかと思います。
そうした際に慌てないように、事前に設定方法や注意点を整理・把握しておくことが推奨となります。