PostgreSQL関連情報

(2002/12/04号)

トップページ
PostgreSQLとは
PostgreSQLとWindows
PostgreSQLとMac OS X


PostgreSQLとWindows

PostgreSQLはもともとUNIX系OS用に開発されてきました。ですから現在でもサポートされている環境はUNIX系OSが中心です。しかしWindows対応も徐々に進められてきており、最近のPostgreSQLのバージョンからはサーバ、クライアントともども動作するようになってきました。

現時点で存在するWindows向けPostgreSQLサーバには次の物があります。

Cygwinとは、Windows上でUNIX環境をエミュレートするフリーのソフトウェアです。この環境の下で利用可能であるCygwin版PostgreSQLは良好に動作しますが、他のプラットフォームに比較するとパフォーマンスが良くないようです。Cygwinを利用しないWindowsネイティブ版PostgreSQLはまだ開発途上ですが、基本的な機能はすでに動作しているようです。
Cygwin版PostgreSQLに関しては谷田さんのページを、Windowsネイティブ版PostgreSQL(マルチスレッドタイプ)に関しては斉藤さんのページをご覧ください。Windowsネイティブ版PostgreSQL(マルチプロセスタイプ)は今後のPostgreSQLリリースに統合されていく予定です。

クライアント側ライブラリやアプリケーションでは、下記の物が公式にWindowsに対応しています。

また、公式ではありませんがWindows上で利用できるものを挙げておきます。

以下では、上記のWindows対応の物のうちクライアント向けのそれぞれについて少々詳しく説明します。

   libpq  
 

フロントエンドアプリケーションのための、PostgreSQL用アクセスライブラリです。

コンパイル済みのWindows用ダイナミックリンクライブラリがPostgreSQLのソース中(バージョン7.2まで)や他のフロントエンドアプリケーションに付属する形で配布されています。しかしそれらのファイルはMULTIBYTEオプションを付けずにコンパイルされている場合が多く、そのままでは日本語を扱う上で問題が発生することがあります。またWindowsアプリケーションの開発を行うにはインポートライブラリも必要となりますが、こちらは配布されていない場合が多いです。そこでMULTIBYTEオプションを付けて、日本語Windows環境に適した仕様でコンパイルし直したものを用意いたしました。必要な方はダウンロードしてご利用ください。

PostgreSQLバージョン6.5に付属するlibpqの日本語Windows版バイナリです。今となっては少々バージョンが古いのですが、PostgreSQLサーバはクライアントに対して上位互換性がありますので通常の使用では問題ありません。バージョン6.5以降の全てのサーバに接続可能です。ちなみにこの逆のパターン(新しいlibpqと古いPostgreSQLサーバの組み合わせ)では接続できません。

上記ファイルはzip圧縮されています。展開すると以下のファイルが得られます。

  1. ヘッダファイル - postgres_ext.h, libpq-fe.h
  2. インポートライブラリ - libpqdll.lib
  3. ダイナミックリンクライブラリ - libpq.dll

上記のうちヘッダファイルとインポートライブラリはアプリケーションの開発を行わない限り不要です。実行環境にはダイナミックリンクライブラリ(libpq.dll)だけがあれば十分です。

なおここで公開している日本語Windows版libpqは、環境変数PG_CLIENTENCODINGが設定されていない場合に自動的にシフトJISが選択されるように、仕様を変更してあります。

   psql  
 

日本語Windows環境で
psqlを使うには?
  1. psql.exeを適当なディレクトリに置きます。
  2. libpq.dllを、psql.exeと同じディレクトリかWindowsのシステムディレクトリに置きます。これでインストールは完了。
  3. psqlを起動するにはコマンドプロンプトから、
    psql -u -h サーバ名 データベース名
    などと入力します。
  • psqlのプロンプトでは、UNIX版と違って入力行の編集ができません。
  • ^D を入力してもpsqlは終了しません。WindowsのEOF文字は ^Z ですから…。
キャラクタベースの対話型プログラムで、任意のSQL文を実行させることができます。

psqlのコンパイル済みWindows用プログラムファイルはPostgreSQLのソース中には含まれていません。そこで、日本語Windows環境に適した仕様でコンパイルしたものを用意いたしました。必要な方は上記のlibpqと共にダウンロードしてご利用ください。

psqlを実行するためには、先に説明したlibpqが必要です。事前にlibpq.dllをpsql.exeと同じディレクトリに用意しておくか、あるいはWindowsのシステムディレクトリ(例えばC:\WINDOWS\SYSTEMやC:\WINNT\SYSTEM32など)にコピーしておく必要があります。

   PostgreSQL ODBC Driver  
 

32ビットのWindows環境で利用可能なODBCドライバです。PostgreSQL本体とは別系列で開発されているため、PostgreSQLとは別にオフィシャルなウェブサイトをもっています。http://odbc.postgresql.org/です。

PostgreSQLバージョン7.2まではPostgreSQLのソース中にも含まれていましたが、PostgreSQLバージョン7.3からは別配布となりましたので、上記オフィシャルサイトなどから別途入手する必要があります。セットアップ機能付きのWindows用バイナリも配布されていますが、これらの多くは英語版のため日本語が正しく扱えません。

そこで日本語を正しく扱えるように変更した、PostgreSQL ODBC Driver 日本語版を公開しています。詳しくはPostgreSQL ODBC Driver 日本語版のページをご覧ください。

PostgreSQL自身の国際化機能を有効にしてコンパイルされたPostgreSQL ODBC Driver 国際化版もあります。詳しくは徳家さんのページをご覧ください。

   libpgtcl  
 

Tcl/TkからPostgreSQLへアクセスするためのライブラリです。Tcl/Tkでロードして利用します。

libpgtclは公式にはWindowsには対応していません。そのためlibpgtclのソースには、Windowsでコンパイルするために必要なファイルが一切含まれていません。しかしTcl/Tkアプリケーションの1つであるPgAccess(次項参照)をWindows上でも実行できるように、特別に作成されたWindows用バイナリがPgAccessと共に配布されています。このDLL自体は日本語の扱いには影響しないはずです。同時に使用するlibpqが日本語対応かどうかに影響されるだけです。

以下では、念のため当方にて日本語Windows環境向けにコンパイルしたlibpgtclを提供しています。必要な方は上記のlibpqと共にダウンロードしてご利用ください。

PostgreSQLバージョン6.5に付属するlibpgtclの日本語Windows版バイナリです。zip圧縮されています。展開すると以下のファイルが得られます。

  1. ダイナミックリンクライブラリ - libpgtcl.dll

ここで公開している日本語Windows版libpgtclは、本来搭載されているはずのNOTIFY関係のインターフェースが取り除かれています。Windows版Tcl/Tkの機能的な制限が理由です。

libpgtclを利用するためには、先に説明したlibpqが必要です。事前にlibpq.dllをアプリケーションと同じディレクトリに用意しておくか、あるいはWindowsのシステムディレクトリ(例えばC:\WINDOWS\SYSTEMやC:\WINNT\SYSTEM32など)にコピーしておく必要があります。

   PgAccess  
 

日本語Windows環境で
PgAccessを使うには?
  1. Tcl/Tk日本語Windows版をインストールしましょう。お勧めするバージョンは 8.0.x です。http://www.sra.co.jp/people/m-hirano/tcltkjp/からダウンロードできます。
  2. ダウンロードしたファイルを展開し、適当なディレクトリに配置します。
  3. libpq.dllとlibpgtcl.dllを、main.tclと同じディレクトリかWindowsのシステムディレクトリに置きます。これでインストールは完了。
  4. PgAccessを起動するにはmain.tclをダブルクリック!。
  • デフォルトのフォントサイズが日本語を表示するには小さすぎますので、最初の起動時に10ポイントくらいに変更しておきましょう([Database]→[Preferences])。
Tcl/Tkで書かれたGUIベースの対話型プログラムで、PostgreSQLの多くの操作をマウスを使ったオペレーションで行えます。PgAccessはPostgreSQL本体とは別系列で開発されているため、PostgreSQLとは別にオフィシャルなウェブサイトをもっています。http://www.flex.ro/pgaccess/です。

Tcl/Tkとは、Perlなどと同系列に分類できるスクリプト言語のことです。スクリプト言語にもかかわらず、GUIを用いた見栄えの良いアプリケーションが作成可能です。Tcl/Tk自体はUNIX系OS版の他に、Windows版やMacintosh版もありますが、PgAccessが動作するのはUNIX系OS上とWindows上のみとなります。この制限はMacOS上で動作するlibpqが無かったことによります。

PgAccessの本体はmain.tclというTclスクリプトファイルと、その他幾つかのファイル・ディレクトリです。PostgreSQLバージョン7.2まではPostgreSQLのソース中にも含まれていましたが、PostgreSQLバージョン7.3からは別配布となりましたので、上記オフィシャルサイトなどから別途入手する必要があります。また、PgAccessのプログラム自体はすでに日本語に対応していますので、日本語Windows対応のTcl/Tkを利用すればそのまま日本語が扱えます。

PgAccessは実行時にlibpgtcllibpqが必要です。ですから、事前にlibpgtcl.dllとlibpq.dllをPgAccessと同じディレクトリに用意しておくか、あるいはWindowsのシステムディレクトリ(例えばC:\WINDOWS\SYSTEMやC:\WINNT\SYSTEM32など)にコピーしておく必要があります。

  日本語Windows対応パッチファイル  
 

libpqpsqlはもともとWindows環境向けにコンパイルできるようになっていますが、日本語を扱うためにMULTIBYTEオプションを指定してコンパイルしてみると、実際にはエラーとなりうまくバイナリが作成できません。

また、libpgtclはWindows環境向けに作成されていないため、Windows環境向けにコンパイルするためにはメイクファイルやリソースファイルなどの不足ファイルを用意してあげなければなりません。

以下に、これらの問題を解消したソースファイルの変更内容を公開いたします。ご自分でコンパイルしてみたい方などは、どうぞ参考にしてください。

上記からダウンロードできるファイルはいわゆる“パッチファイル”ですので、変更部位以外は含まれておりません。エディタなどでも開くことはできますが、できればpatchコマンド等を利用してPostgreSQL 6.5のソースファイルに適用してください。

このパッチには以下の変更内容が含まれています。

  1. libpqのWindows環境用メイクファイルwin32.mkを、MULTIBYTEオプションに対応(オリジナルではメイクエラーが起きていた)。
  2. Windows環境におけるデフォルトエンコーディングを、MULTIBYTEオプションで指定したエンコーディングに変更(オリジナルではサーバと同じエンコーディングだった)。
  3. libpgtclのWindows環境用メイクファイルやリソースファイルなどを新規作成。
  4. libpgtclの機能をWindows版Tcl/Tk向けに変更。具体的にはNOTIFY関連の機能の削除。
  5. ルートのメイクファイルにlibpgtclのコンパイル指示を追加。

このパッチファイルは、PostgreSQL 6.5のソースファイルのルートディレクトリを基準に作成してあります。UNIX系OS上ならたとえば次のようにしてパッチを適用してください。

cd postgresql-6.5
patch -p0 < postgresql-6.5-win32jp.patch

日本語Windows環境にてMULTIBYTEオプション付でコンパイルするには、たとえばコマンドプロンプトにて以下のように入力します(具体的にはお使いの開発環境に依存します)。

cd postgresql-6.5
nmake -f win32.mk MULTIBYTE=SJIS

ただし、日本語Windows版Tcl/Tkが必要です。

その他

ここで公開しているものはすべて無保証です。しかし、このページで紹介している情報そのものに関して、何かお気づきの点などがありましたらお知らせください。

質問などは、情報を共有するためにも日本の PostgreSQL メーリングリストへ投稿してください。可能な範囲で対応したいと思います。ちなみにこのページを書いたのは 片岡 裕生 <kataoka@interwiz.jp> です。

関係サイトへのリンク

ホームページ最新情報インターウィズ!?サービス紹介ソフトウェア工房メーリングリストNetSmile