🦁

psqlでlc_messages=Cを指定しているのに日本語が表示される理由

2024/11/04に公開1



windowsに直にインストールしたPostgresql環境です。
postgresql.conflc_messages = Cを指定しているのに、psqlで接続した時に何故日本語が表示されるのか?

結論

psql上に表示されるシステムメッセージの言語を決めるパラメータは2つある模様。

  • 接続元の環境変数のLC_MESSAGES、未指定の場合は接続元のOSの言語
    • psql接続後に値を確認する事や変更する事は一切出来ないと思う。せめて確認をしたい。
    • ここの変数をなんと言うのか不明。
  • 接続先のDBの設定のLC_MESSAGES
    • 接続先のDBのconfファイルを書き換えたり、接続後のシェルでSET LC_MESSAGES TO 'C'などで変更可能。一般的にググって出てくるpsqlの設定はこれを指す

前者の接続元に依存する言語は、\lや接続時のパスワードを促す文章などの言語に使われる。
pg_settingsで取れる値は全てCなのに日本語になってる。

後者の接続先のDBに依存する言語は以下の通り。赤枠の部分はlc_messagesを日本語にして水色の部分はCを指定しているので、DBのサーバー側から渡されたエラーメッセージの言語に反映されている。
Cの場合でも行 1の部分は接続元に依存しているようだ。

postgresql公式ドキュメントやチュートリアルを見ても前者の概念は記載が見つからなかった。
どこに書いてあるか知ってる人おしえてくれ