[ホーム] -> [Aache + PHP + PostgreSQL 実験室]

Windows から PostgreSQL を

Windows から PostgreSQL を使うための説明をします。cygwin とか使えば、Windows 上で PostgreSQL を動かせますが、そうではなく、Windows のソフトを使っての説明をしようと思います。

ODBC セットアップ

Windows のソフトからデータベースにアクセスするにはいろいろ方法がありますが、ここでは一番汎用的な ODBC ドライバを使った接続方法を説明します。

サーバ側の設定

まず最初に、サーバ側の設定をしてしまいましょう。絶対しなければいけないと言うわけではありませんが、odbc.sql というファイルを実行し、データベースに ODBC が内部で利用する関数を作成します。サーバ側のコマンドプロンプトから、次のように実行します。

>  psql -f postgresql-7.2.1/src/interfaces/odbc/odbc.sql データベース

この odbc.sql というファイルは、RPM からインストールした場合、postgresql-odbc というパッケージをインストールすると、/usr/share/pgsql/odbc.sql にインストールされています。

サーバ側は、これで終わりです。ODBC 経由で接続する予定のデータベースすべてに対してこの odbc.sql を流して下さい。template1 データベースに対して流しておくと、次から作成するデータベースには、デフォルトで ODBC 用の関数が作成されるので便利です。

ODBC ドライバの入手

Windows 用の ODBC ドライバは、PostgreSQL の ftp サイトから入手できます。

ODBC ドライバは、Windows Installer でインストールするように作成されているので、Windows Installer のインストールされてない環境の人は full 版を、Windows Installer のインストールされている環境の人は msi 版を入手します。Windows Me/2000/XP や、Microsoft Office 2000/XP をインストールしている人は、msi 版でいいはずです(だめなら full で)。

その中でバージョンのあった最新のものを入手しましょう。ZIP ファイルだと思うので、解凍してインストールして下さい。

古いバージョンがインストールされている場合は、アンインストールしないとインストール出来ないと思います。

ODBC 機能ですが、7.02.0001 以降を利用すれば、7.2 から導入された MD5 による接続などをサポートしています。ただし、少なくとも、SSL による接続はサポートしていません。7.02.0001 には、「PostgreSQL, PostgreSQL+ (Beta), PostgreSQL+ Unicode (Beta) の3種類のドライバが入っています。PostgreSQL は ODBC API 2.5 準拠、PostgreSQL+ のドライバは、ODBC API 3.0 準拠みたいです。Unicode は UNICODE で作成したデータベースにネイティブ(エンコーディングの変換することなく)接続する見たいです。

クライアント側の設定

次はクライアントの設定ですが、設定を行うためには「ODBC データソース アドミニストレータ」を起動します。これは Windows 2000 などはスタートメニューの「管理ツール」に、それ以前の Windows はコントロールパネルにあります。「ODBC」や「データソース」という項目がそうです。

画面から「ユーザ DSN」タブを開き(デフォルトでそうなっていると思うけど)、「追加」ボタンを押します。

データソースの選択画面で、「PostgreSQL」を選択して「完了」ボタンを押します。もし、データベースを Unicode で作成した場合、「PostgreSQL+ - Unicode」の方をお勧めします。

PostgreSQL のドライバセットアップ画面が出ます。Data Source には、適当な名前を入力します(あとでこの名前を使ってアクセスすることになります)。Database には、アクセスしたい PostgreSQL のデータベース名、Server には PostgreSQL が動いているマシン名(IP アドレスでも何でも、アクセスできるやつ)、User Name には、接続するときに利用するユーザ名を指定します。

もし、サーバ側で、MD5 を利用して接続するようになっていり場合は、Password にパスワードを入力しておきます。ここに設定しておかないと、接続するときにパスワードを聞いてきますが、MD5 の場合接続時にパスワードを入力すると接続できません。password による接続の場合は問題ありません。これは ODBC のバグかと思わるので、バージョンが上がれば解決されると思います(こちらで確認した限りでは、7.02.0001 まではダメ、7.02.0002 からは大丈夫)。

もし、ここでパスワードを設定してしまう場合は、「ユーザー DSN」とし作成するようにして下さい。ユーザ管理が出来る Windows NT/2000 などであれば、他人はこのデータソースを利用できません。それ以外の OS や、「システム DSN, ファイル DSN」にしてしまうと、誰でもそのデータソースを使って接続できてしまうので気を付けて下さい。

日本語を使う上での重要な設定をします。「DataSource」ボタンを押すと、Advanced Options という画面が開きます。その中の Connect Settings に「SET CLIENT_ENCODING TO 'SJIS';」を入力します。これをしないと、文字化けが発生します(サーバはたぶん EUC_JP とかでデータベースを作っていると思いますが、Windows 上では SJIS で表示しないといけません)。

ただし、データベースが UNICODE の場合は、PostgreSQL+ Unicode ドライバを使えば SET CLIENT_ENCODING の設定は必要ありません。SET CLIENT_ENCODING は、サーバ側でエンコーディングを行って、クライアントには SJIS が送られるのに対し、Unicode ドライバを使った場合は、ODBC の仕組みで直接 UNICODE でアクセスするようです。

また、この画面で「ReadOnly」にチェックが付いていたら、はずしておきましょう。チェックが付いていると、ODBC 経由でデータの追加・変更・削除が出来なくなります(出来なくてもいいのなら、チェックを付けておいた方が安全かもしれませんが)。

Access での例

えー、多少なりとも Access をさわったことがある人が対象です。

まず、新しいデータベースを作成して下さい。次に PostgreSQL のテーブルのリンクを作成します。

テーブル一覧が表示されているのを確認してから、「新規作成」ボタンを押します。その中から「テーブルのリンク」を選択します。ファイルを選択する画面が出るので、「ファイルの種類」コンボボックスから「ODBC Database()」を選択します。データソースの選択画面が開くので、「コンピュータ データソース」タブをクリックし、先ほど作ったデータソースを選択します。そして「OK」ボタンを押します。

接続に失敗すると、ここでエラーメッセージが表示されます。ここで失敗する場合は、大抵、pg_hba.conf が適切に設定されていないと思います。PostgreSQL のセキュリティリモートからのアクセスユーザ認証を行う を読んで設定し直して下さい。少なくとも、ODBC バージョン 07_02_0001 では、まだ MD5 認証をサポートしていませんpassword 認証にしておく必要があります。

パスワードが必要な場合はパスワードを聞いてきますので、そのユーザのパスワードを入力して下さい。

無事接続されると、テーブル一覧が表示されます。リンクを作りたいテーブルを選択し(複数選択できます)「OK」ボタンを押します。

テーブルの作り方によりますが、インデックスを作っていないと、どのキーを主キー(プライマリーキー)として認識させるかを聞いてきます。適切に設定して下さい。まあ、分からなければそのまま進んで構わないですけどね。

これでテーブルのリンクが作成されました。リンクテーブルを開き、データを見て下さい。Access からデータを追加したり変更したりしたら、psql コマンドから正しく入力できているか確認して下さい。

もし日本語が文字化けしている場合は、データソースを設定するときに、「Connect Settings」を設定しているか確認して下さい。

追加したり変更したり出来ない場合は、データソースの設定で、「ReadOnly」にチェックが付いていないか確認しましょう。

VBWSH から・・・

VB からのアクセスも、VB でデータベースを扱ったことがある方には簡単だと思います。ODBC 経由でアクセスする方法は何通りかありますが、将来性を考えて、ADO を使ったサンプルを示します。

Dim strConnect    As String
Dim adoConnection As Object
Dim adoRS         As Object

strConnect = "Provider=MSDASQL; DSN=_DSN_; UID=_USER_; PWD=_PASSWORD_"
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Open strConnect
Set adoRS = adoConnection.Execute("select name from inet_profile")
Do While Not adoRS.EOF
    Debug.Print adoRS.Fields("name")
    adoRS.MoveNext
Loop
adoRS.Close
adoConnection.Close

エラー処理とか入っていませんが、ご了承下さい。strConnect 変数に設定している文字列で、_DSN_ を作成したデータソース名、_USER_ をユーザ名、_PASSWORD_ をユーザのパスワードに置き換えて下さい。

WSH の場合は、Dim による変数宣言で、As と型が指定できないので、As 以降を削除する必要があります。それと結果を画面に出したい場合は、Debug.Print ではなく、WScript.Echo とかを利用します。それだけの変更で動きます。

他のツール

ODBC 経由で動かせるツールはほとんど利用できると思います。個人的にお勧めのソフトは、つみきWebさんの Common SQL Environment です。ODBC 接続も出来るのですが、PostgreSQL に直接接続できます

フリーな上、とても高機能な上、使いやすいです。開発の補助ツールとして重宝しています。これを利用するには、libpq.dll が必要なので、インターウィズ さんから libpq を入手して下さい。

インターウィズさんの libpq.dll は PostgreSQL 6.5 ベースと少し古いため、MD5 暗号とは出来ません。サーバの設定を少し見直す必要があると思います。

ホームへ