Contents


対象は「psqlが出力するメッセージ」の文字化け

Windowsで、psqlの日本語メッセージが文字化けする原因は2種類あるようです。

今日の対策は後者向け。前者は、リンク先の記事に書いたとおり「地域と言語」を日本語にして直りました。一方後者は、諸々の設定変更だけでは解決したことがなく、結局intl.dllを別のに差し替えて
(詳細:312日の記事)対策してました。でも、昨日の最後に書いたとおりPostgreSQL 9.5 Beta 1psqlは無事直っているので、それを使ってみたら?というのが今日の趣旨。intl.dllを差し替えるより簡単です。

以下、実行環境は次のとおり。PostgreSQL 9.4のマイナーバージョンは少し古いですが、
9.4.4のポータブル版に付属のpsqlでもやっぱり文字化けしてました。


文字化けしてる例、しない例

PostgreSQL 9.4を日本語版のWindowsにインストールしてpsqlを起動すると、多くの場合こんな ↓ 文字化けになると思います。2行目はパスワード要求で、パスワード認証は普通に通り、その後の動作も正常ですがメッセージだけが変な状態。
$ psql -U postgres
繝ヲ繝シ繧カ postgres 縺ョ繝代せ繝ッ繝シ繝・
psql (9.4.1)
"help" 縺ァ繝倥Ν繝励r陦ィ遉コ縺励∪縺・


データベースに未接続でヘルプを表示しても ↓ 文字化けするので、PostgreSQL本体とは関係ない症状。他のコマンドラインツール、例えばpg_dumpintl.dllに依存しているので同様です。
$ psql --version
psql (PostgreSQL) 9.4.1

$ psql --help
psql 縺ッ PostgreSQL 縺ョ莨夊ゥア蝙九ち繝シ繝溘リ繝ォ縺ァ縺吶€・
菴ソ逕ィ譁ケ豕・
  psql [繧ェ繝励す繝ァ繝ウ]... [繝・・繧ソ繝吶・繧ケ蜷・[繝ヲ繝シ繧カ蜷江]
(..)


先ほど書いたとおり動作そのものは正常で、日本語を含むクエリ発行やデータ取得は問題なく、最後の「1行」の表示が「1陦・」になるだけ。
SELECT repeat(chr(12411) || chr(12370), 10)
AS "データベースから返ってきた日本語文字列";

    データベースから返ってきた日本語文字列
------------------------------------------
 ほげほげほげほげほげほげほげほげほげほげ
(1 陦・


上のままでも用途によっては問題ありませんが、9.5 Beta 1psqlは直ってるので ↓ 日本語メッセージが正常に表示されます。他のコマンドラインツールも同様。


9.5 Beta 1付属のpsqlだけ準備して使う方法

方法といっても簡単で、EnterpriseDB社のDownload PostgreSQL Binariesから9.5.0 Beta 1をダウンロードし(下のzipファイル。32bit64bitは適宜選んで下さい)適当なフォルダに解凍するだけ。


とりあえずbinshareフォルダがあれば、日本語メッセージが正常に表示されて動きます。他にVisual C++のランタイムも必要ですが、既にPostgreSQL 9.4を使っているWindows環境なら既存のはず。今回、とくにpsql用にランタイムを追加したりは不要でした。なおshareフォルダに各言語のメッセージデータがあり、これを省くと常に英語
(前に使ったGNU Octave付属のpsqlと同じ)。


psqlがサーバより新しくても、問題なさそう

ドキュメントのpsqlのページ、終わりの方にある「注釈」より。
psqlは、同じまたはより古いメジャーバージョンのサーバと稼働させることが最善です。 (..)
複数のメジャーバージョンが異なるサーバとの接続のためにpsqlを使用したいのであれば、psqlの最新版を使用することを勧めます。

メジャーバージョンというのは、例えば9.49.5の違い。一つ目のピリオドの次の数字です。9.4のサーバに対して9.5psqlを使うのは「より古いメジャーバージョンのサーバと稼働させる」ことで、問題ないというか最善とされてます。諸事情でベータ版を使えない場合、9.5が早く正式リリースされるといいですね。