10
月14
日追記:Windows
用PostgreSQL 9.5 Beta 1に付属のpsqlなら文字化けせず、9.4のサーバにも使えます。
詳細はこちら。
要約:こちらにあるoctave-4.0.0_0.zipを解凍してすぐ使えます(binフォルダの中)。英語固定なのはpsqlのヘルプなどインターフェイスだけで、日本語のクエリやデータ取得は普通に可能。日本語インターフェイスにこだわらなければ一番手軽なpsql文字化け解消策かも。ついでにGNUPLOTでグラフ描いて遊べるよ ^_^
Windows版GNU Octave 4.0(ポータブル版)ダウンロード
GNU Octaveはオープンソースの数値計算・統計処理用言語で、MATLAB(高価な商用ソフト)の互換ソフトウェアとしてある程度有名。長らくメジャーバージョンが3.xで基本的にCUIだけでしたが、今年5月に出たバージョン4.0からGUIも付きました。詳細は下記を参照。
» OSDN : GUIがデフォルトになった数値解析ソフト「GNU Octave 4.0」が登場
» GNU Octave(公式サイト、英語)
上の公式サイト → Download → Windows版へのリンクを開くと、Windows用のFTPサイトに行きます(冒頭に書いたリンク先もここ)。インストーラとポータブル版(ZIP)の両方あり、今回、後者をダウンロードしたらpsqlやlibpq.dllなど関連ライブラリが入ってました。
Rと同様、Octaveもいろんなパッケージで機能追加でき、その一つにデータベース接続があってPostgreSQL用のモジュールもあるので(下記参考)、その関連でpsqlとかが付いているのかも。
» Dirk Eddelbuettel : Octave modules to access Postgres
使用例
GNU Octave本体はスルーして付属のpsqlをテスト。上のZIPを適当な所に解凍し、binフォルダをカレントとしてコンソールを起動したらすぐ使えました(PostgreSQLサーバは別途立ち上げ済み)。以下のスクリーンショットはコマンドプロンプトでなくConEmuの画面ですが、動作はどちらも同じ。
:: コンソールの文字コードを確認。日本語版Windowsなら普通932(Shift JIS)
chcp
:: psqlのバージョン確認
psql --version
:: psqlでデータベースに接続。ヘルプに関するメッセージが英語
psql -U postgres
:: スキーマ一覧を表示。タイトルが英語
postgres=# \dn
:: ヘルプを表示。これも全て英語
postgres=# \?
上のように、コンソールの文字コードとかWindowsの言語に関係なく、このpsqlのインターフェイス(ヘルプ、列名、メッセージなど)は全て英語で、その意味で文字化けと無縁。一方でサーバが返すデータやメッセージは、クライアント側のエンコーディング設定が適切なら日本語等も問題なく表示されます。↓
:: クライアント側のエンコーディング確認
postgres=# \encoding
SJIS
:: 日本語を含むクエリ
postgres=# SELECT 'あいうえお';
?column?
------------
あいうえお
(1 row)
:: わざとエラーになるクエリ。メッセージの言語はサーバの初期設定による
postgres=# SELECT rand();
ERROR: function rand() does not exist
LINE 1: SELECT rand();
^
HINT: No function matches the given name and...
:: メッセージ言語を日本語に変更。エラー表示がきちんと日本語になった
postgres=# SET lc_messages TO 'Japanese';
SET
postgres=# SELECT rand();
ERROR: 関数rand()は存在しません
LINE 1: SELECT rand();
^
HINT: 指定名称、指定引数型に合う関数がありません。...
:: ローカライズされた曜日名。言語はサーバの初期設定による
postgres=# SELECT to_char(now(), 'TMDay');
to_char
---------
Tuesday
(1 row)
:: 日付/時刻のロケールを日本語に変えて曜日名を表示。問題なく表示された
postgres=# SET lc_time TO 'Japanese';
SET
postgres=# SELECT to_char(now(), 'TMDay');
to_char
---------
火曜日
(1 row)
本家(PostgreSQL 9.4.1付属版)との比較
もしかしたら9.4.1より後では直っているかもですが、Windows版PostgreSQL 9.4.1の本家(EnterpriseDB社のインストーラ)とポータブル版では、psqlのインターフェイスが ↓ のように文字化けします。この件と対策は前のブログで書いたとおりで、ライブラリのintl.dllを別のものに差し替えればOK。
文字化けとは別に、この本家版psqlでインターフェイスを英語にするには、コンソールの文字コードを437等に変える必要があります。そうすると普通のWindowsコマンドプロンプトではフォントも変わってしまい、日本語が使えなくなって面倒。前項のような「インターフェイスは英語のみ、クエリ・データで必要な時だけ日本語」が、意外と難しい。今回のOctave付属psqlではそれが簡単、というか常にそういう動作です。
↓ 本家版とOctave付属版のファイル詳細と、Dependency Walkerで依存ライブラリを見たところ。Octave付属版(右側)がintl.dllを使ってないことが分かります。
psqlからGNUPLOTを実行して遊ぶ
psqlが入ってるGNU Octaveのbinフォルダにはグラフ描画言語GNUPLOTがあるので、psqlから呼び出して遊べます(もちろん別々に実行しても同じ)。グラフ画像は冒頭の再掲です。
:: \! に続けて任意のコマンドラインツールを実行できる
postgres=# \! gnuplot
G N U P L O T
Version 4.6 patchlevel 7 last modified Apr 2015
Build System: MS-Windows 32 bit
Copyright (C) 1986-1993, 1998, 2004, 2007-2015
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'windows'
gnuplot>
gnuplot> plot cos(x) # 別ウィンドウにグラフが出る
gnuplot> quit # 終了してpsqlに戻る
postgres=#