TECH BLOG
技術ブログ
  • 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 つの対応が必要です。

  1. configure スクリプトに --enable-nls オプションをつけて実行する。
  2. 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 オプションをつけ忘れると、インストールのやり直しが必要となりますので、気をつけたいところです。

基本的には英語で運用することで問題ないと思いますが、ユーザの要望によってはメッセージを日本語にしたいケースもあるかと思います。
そうした際に慌てないように、事前に設定方法や注意点を整理・把握しておくことが推奨となります。

CATEGORY

ARCHIVE

PostgreSQLに関するご相談は
株式会社インサイトまで
お気軽にお問い合わせください。

CONTACT