[ホーム] -> [Aache + PHP + PostgreSQL 実験室] |
Windows から PostgreSQL を使うための説明をします。cygwin とか使えば、Windows 上で PostgreSQL を動かせますが、そうではなく、Windows のソフトを使っての説明をしようと思います。
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 用の関数が作成されるので便利です。
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 をさわったことがある人が対象です。
まず、新しいデータベースを作成して下さい。次に PostgreSQL のテーブルのリンクを作成します。
テーブル一覧が表示されているのを確認してから、「新規作成
」ボタンを押します。その中から「テーブルのリンク」を選択します。ファイルを選択する画面が出るので、「ファイルの種類
」コンボボックスから「ODBC Database()
」を選択します。データソースの選択画面が開くので、「コンピュータ データソース
」タブをクリックし、先ほど作ったデータソースを選択します。そして「OK
」ボタンを押します。
接続に失敗すると、ここでエラーメッセージが表示されます。ここで失敗する場合は、大抵、pg_hba.conf
が適切に設定されていないと思います。PostgreSQL のセキュリティ の リモートからのアクセス と ユーザ認証を行う を読んで設定し直して下さい。少なくとも、ODBC バージョン 07_02_0001 では、まだ MD5 認証をサポートしていません。password
認証にしておく必要があります。
パスワードが必要な場合はパスワードを聞いてきますので、そのユーザのパスワードを入力して下さい。
無事接続されると、テーブル一覧が表示されます。リンクを作りたいテーブルを選択し(複数選択できます)「OK
」ボタンを押します。
テーブルの作り方によりますが、インデックスを作っていないと、どのキーを主キー(プライマリーキー)として認識させるかを聞いてきます。適切に設定して下さい。まあ、分からなければそのまま進んで構わないですけどね。
これでテーブルのリンクが作成されました。リンクテーブルを開き、データを見て下さい。Access からデータを追加したり変更したりしたら、psql
コマンドから正しく入力できているか確認して下さい。
もし日本語が文字化けしている場合は、データソースを設定するときに、「Connect Settings
」を設定しているか確認して下さい。
追加したり変更したり出来ない場合は、データソースの設定で、「ReadOnly
」にチェックが付いていないか確認しましょう。
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 暗号とは出来ません。サーバの設定を少し見直す必要があると思います。