作成日:2005.02.24
PostgreSQL 8.0から、Windows Nativeなフリーのバイナリが配布されるようになった。とりあえずインストールと簡単な動作確認方法をまとめた。
- ダウンロード
・PostgreSQLのダウンロードページ
http://www.postgresql.org/ftp/binary/
あるいは
ftp://ftp.postgresql.org/pub/binary/
から最新バージョンをダウンロードする。日本語版は postgresql-8.x.x-ja.zipのようにファイル名に -ja がついている。2005.2上旬現在 8.0.1がリリースされている。
- インストール・実行
・ダウンロードしたzipファイルをテンポラリフォルダに解凍する。8.0.1には postgresql-8.0-ja.msi, upgrade.bat, README.txtが梱包されている。
・postgresql-8.0-ja.msiをクリックするとインストールウィザードが開始する。ちなみにアンインストールするときもこのファイルを実行し、「削除(Remove)」を選択する。アンインストールしても入力したデータは削除されないで残る。全データを削除したいときは(デフォルトではインストール先の) data フォルダを削除する。
・以下で特に説明書きした個所以外は「次へ」でどんどん先に進む。
・(注) 既に OpenSSLの古いバージョンがインストールされているときは以下のようなダイアログがでる。
「インストーラは、システム参照PATHから互換性のないバージョンのOPenSSLを見つけました。PostgreSQLは、OpenSSL-0.9.7以降のものを要求します。もしあなたがOpenSSLファイルを取り除けば(LIBEAY32.DLL,SSLEAY32.DLL)、インストーラは、自動的に新規バージョンをインストールします。」
インストールをキャンセルし、C:\WINDOWS\system32 の下などにある libeay32.dllと ssleay32.dllのファイル名を適当に変更する。
・(注) 既に cygwinの古いバージョンがインストールされているときは以下のようなダイアログが出る。
「あなたのシステムPATHは、'cygwin\bin'を含みます。cygwinディレクトリに見つけた数個のDLLファイルのバージョンはバグのために、全ての外部手続きの言語は、無効にされました。あなたは、システム・パスからcygwinディレクトリを取り去ってインストーラを再スタートさせることを推奨されます。」
インストールをキャンセルし、環境変数PATH から cygwinの記述("C:\cygwin\bin;"など)を削除する。
・「インストールオプション」設定画面では PostgreSQLのインストール先を C:\Program Files\PostgreSQL\8.0\ 以外にしたいときは変更する。データベースディレクトリだけを例えば C:\Pgdata などに変更するには「データベースディレクトリ」の箇所を反転させ「browse」をクリックする。実運用するならデータベースディレクトリは別フォルダにした方がいいかもしれないが、試行ならそのまま進めても構わない。
・「サービス構成」の設定画面では、ユーザ名とパスワードを設定する。Administratorsグループ以外のメンバーということなので、アカウント名は postgres のまま、パスワードはここでは説明上「postgrespw」とする。
「ユーザ 'xx\postgres'を見つけることが出来ませんでした。自動的に作り出しますか?」に「はい」とする。「あなたの明示したパスワードは弱いように見えます。インストーラにそれをランダムなパスワードと取り替えますか?」と出るかもしれないがこれには「いいえ」とする(「はい」にしてしまってそのときに表示されたパスワードを控えていないと再インストールで postgres というユーザ名が使えなくなる。そのときは Windowsに postgres というユーザができているのでそれを削除する)。「'log on as a service'を正しく許可することができました。」と出ればOK。これで postgres という Windowsユーザが追加されている。ここではセキュリティ上 Administrators グループのユーザは指定できないので注意すること。
・「データベースクラスタの初期化」の設定では、ローケールの中に Japanese, Japan もあるが、ここは defaultの C のままがよい(参考:ローケールを Japaneseにするとソート順が狂うそうである)。エンコーディングは EUC_JP のまま変更しないのがよい(といっても他に選べるものはなさそうである)。パスワードはこの上のサービス構成で設定したものとは違うものを設定するようにということなので、ここでは説明の都合上「postgresdbpw」としておく。
・「手続き言語を可能にする」では PL/pgsqlしか選べないようである。
・後はとりあえずデフォルトのまま「次へ」でさらに先に進めていくとインストールが完了する。
・続いて upgrade.batを実行してアップグレードする。
・スタート -> すべてのプログラム -> PostgreSQL 8.0 -> サービスの起動で PostgreSQLをサービスとして動作させる。
(注) メールで、Windows2000に PostgreSQLをインストール中に「コマンドまたはファイル名が違います」というメッセージが出てインストールが中断してしまう、という質問を受けました(2005/07/07)。
以下と全く同じメッセージではなかったのですが、WindowsMeから Windows2000にアップグレードしたパソコンで COMSPECが書き換わらないことが原因でした。
http://www.parkcity.ne.jp/~chaichan/qanda/qa6147.htm?05-07-02-13-06
- 動作確認
DBサーバが動いていることを以下のようにコマンドラインから確認する。
・コマンドプロンプトで、カレントディレクトリを PostgreSQLをインストールしたディレクトリ下のbinに移動する
C:\>cd \"Program Files"\PostgreSQL\8.0\bin C:\Program Files\PostgreSQL\8.0\bin>・test DBを作成する
C:\Program Files\PostgreSQL\8.0\bin>createdb -U postgres test Password:postgresdbpw CREATE DATABASE と表示される C:\Program Files\PostgreSQL\8.0\bin>psql -U postgres -h localhost test パスワード:postgresdbpw・以下のメッセージが出てSQLコマンドの実行が可能となる
PostgreSQL の会話型ターミナル、psql 8.0.1 for windows へようこそ Type: \copyright とタイプすると、配布条件を表示します。 \h とタイプすると、SQL コマンドのヘルプを表示します。 \? とタイプすると、内部スラッシュコマンドのヘルプを表示します。 \g と打つかセミコロンで閉じると、クエリーを実行します。 \q で終了します。 test=#・テスト用のテーブルの作成
test=# create table addrbook (name varchar(50),telno varchar(50), email varchar(50)); CREATE TABLE と表示される・テストデータの入力
test=# insert into addrbook (name,telno,email) values ('Taro.Yamada','090-1234-5678','taro@hoga.ne.jp'); INSERT 17256 1 と表示される test=# insert into addrbook (name,telno,email) values ('Hanako.Yamada','090-1111-9999','hanako@hoga.ne.jp'); INSERT 17257 1 と表示される test=# select * from addrbook; name | telno | email ---------------+---------------+------------------- Taro.Yamada | 090-1234-5678 | taro@hoga.ne.jp Hanako.Yamada | 090-1111-9999 | hanako@hoga.ne.jp (2 行)以下のような日本語データも入力しておくと後で文字化けしないかどうかテストできる。test=# insert into addrbook (name,telno,email) values ('山田花子','090-1111-9999','hanako@hoga.ne.jp');・これで動作確認完。PostgreSQLコマンド(\q)を終了する。
test=# \q
- Perlからのアクセス
・ActivePerlからPostgreSQLにアクセスするにはDBアクセス用モジュール(DBI/DBD)をインストールする必要がある。
コマンドプロンプトを開いて以下に示すコマンドを実行する。
このインストールでは、インターネットにアクセスするのであらかじめ回線接続する。
もし、プロクシを通してインターネット接続しているなら、コマンドプロンプトから以下の環境変数を設定する必要がある(サーバ名、ポートは環境に合わせること)。
set HTTP_PROXY=http://192.168.0.2:8080(注)以下のコマンドを実行するためには、C:\Perl\binにパスが通っていること(実行されるコマンドは C:\Perl\bin\ppm.bat)。
C:\>ppm PPM interactive shell (2.2.0) - type 'help' for available commands.・まずはDBIパッケージをインストールする(ActivePerl 5.6.x/5.8.x 共通。ただし、5.8.x のときは (y/N) の問い合わせることなくインストールが開始する)。
PPM> install DBI Install package 'DBI?' (y/N): y Installing package 'DBI'... Downloading http://ppm.ActiveState.com/PPMPackages/5.6plus/MSWin32-x86-multi-thread/DBI-1.37.tar.gz ... (長いので省略) PPM>・続いてDBD-Pgパッケージをインストールする(ActivePerlのバージョンが、5.6.x と 5.8.xではアクセス先が異なる)。
ActivePerl が v5.6.xのときは、以下のように。
PPM> install http://www.soulcage.net/ppds/DBD-Pg.ppd
Install package 'http://www.soulcage.net/ppds/DBD-Pg.ppd?' (y/N): y
Installing package 'http://www.soulcage.net/ppds/DBD-Pg.ppd'...
(長いので省略)
PPM>
ActivePerl が v5.8.xのときは、以下のように。
ppm> install http://www.blingforyourring.com/DBD-Pg.ppd
(長いので省略)
====================
Install 'DBD-Pg' version 1.45 in ActivePerl 5.8.6.811.
====================
(長いので省略)
Successfully installed DBD-Pg version 1.45 in ActivePerl 5.8.6.811.
ppm>
・(注)PPM> install DBI で以下のエラーが出る場合は、ネットワーク接続されているか(必要ならこの上で説明した HTTP_PROXY が設定されているか)どうかを確認する。
ActivePerl 5.6.xでは Error installing package 'DBI': Could not locate a PPD file for package DBI ActivePerl 5.8.xでは Error: No valid repositories: Error: 500 Can't connect to ppm.ActiveState.com:80 (Bad hostname 'ppm.ActiveState.com') Error: 500 Can't connect to ppm.ActiveState.com:80 (Bad hostname 'ppm.ActiveState.com')・インストールが完了したらppmを終了する。
PPM> quit Quit![追記]
以前、DBD-Pgをインストールするためのサイトとして
http://crazyinsomniac.perlmonk.org/perl/ppm/
を紹介していたのですが、どうも消滅してしまったようなので上記の説明を書き換えました。上記でインストールが可能であればここの追記の内容は無視して構いません(バージョンも古い)。
perlmonk.orgにアクセスできないという投稿が WEB相談室にあった(2006/01/06)。万一アクセスできないままだと困るので代わりの配布サイトがないか探してみました。結局、ネットワークから直接インストールできるところはそのときは見つけることができず、以下のサイトから zipファイルをダウンロードしてインストールすれば簡単なアクセステストでは動作することを確認しました。
http://www.edmund-mergl.de/export/(ActivePerl 5.6.x用)
http://www.cs.cmu.edu/~blangner/perl/dbd_pg.html(ActivePerl 5.8.x用)
上記のサイトから DBD-Pg.zipをダウンロード/解凍し、コマンドプロンプトのカレントディレクトリを解凍先に移動して、ppm install DBD-Pg.ppd コマンドを実行すればインストールが可能である。5.6.x用は相当古い(0.95)ので pg_hba.conf で md5 -> trustに変更が必要であった。5.8.0用も少し古い(1.22)が特に問題はなかった。
(注) WEB相談室で ppm install DBD-Pg というハンドル名で回答しているのは筆者である。
[追記ここまで]
[追記2]
どうも、上記の http://www.blingforyourring.com/DBD-Pg.ppd にもアクセスできなくなったようである。そのときはActivePerl 5.8では、コマンドプロンプトから
ppm install http://pgfoundry.org/frs/download.php/1639/DBD-Pg-5.8.ppd
を、また、ActivePerl 5.6では(5.6は上記の soulcageでインストール可能であるが、以下は最新バージョンである)、
ppm install http://pgfoundry.org/frs/download.php/1637/DBD-Pg-5.6.ppd
を実行すればインストール可能である(出展)。
(注)ppmコマンド実行後に、install … でもよい。
OpenSSL dllも必要なときは、
ppm install http://pgfoundry.org/frs/download.php/1640/DBD-Pg-5.8s.ppd
ppm install http://pgfoundry.org/frs/download.php/1638/DBD-Pg-5.6s.ppd
とすればよい(s のある ppdファイルの方)(出展)。ファイル自体を入手したいなら、
http://pgfoundry.org/frs/?group_id=1000199&release_id=1057
からダウンロードできる。
[追記2ここまで]
・以下のソースを例えば /cgi-bin下に pg.cgiという名前で保存する(スクリプトの文字コードを EUCにすること)。ソースのダウンロードはこちらから右クリックで保存(注:拡張子は txtになっています)。
#! /usr/local/bin/perl use DBI; $dbname = "test"; $user = "postgres"; $passwd = "postgresdbpw"; $tbname = "addrbook"; $host = "localhost"; # # DBオープン # $db = DBI->connect("DBI:Pg:host=$host;dbname=$dbname", $user, $passwd) || die "DBI connect failed : $DBI::errstr"; # # SELECT実行 $st = $db->prepare("SELECT name,telno,email from $tbname"); $res = $st->execute; print <<HEADER; Content-type: text/html <html> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>簡易アドレス帳(PostgreSQL-Perl)</title> </head> <body> <table border=1> <caption>簡易アドレス帳(PostgreSQL-Perl)</caption> <tr> <th>名前</th> <th>電話番号</th> <th>メールアドレス</th> </tr> HEADER while(@res = $st->fetchrow) { print <<ROW; <tr> <td>$res[0]</td> <td>$res[1]</td> <td>$res[2]</td> </tr> ROW } print <<FOOTER; </table> </body> </html> FOOTER # # 結果解放 # $st->finish; # # DBクローズ # $db->disconnect; 1;
(注) ・ブラウザで「http://ホスト名/cgi-bin/pg.cgi」にアクセスし、以下のような表示が出れば OK である。
簡易アドレス帳(PostgreSQL-Perl) 名前 電話番号 メールアドレス Taro.Yamada 090-1234-5678 taro@hoga.ne.jp Hanako.Yamada 090-1111-9999 hanako@hoga.ne.jp
- PHPからのアクセス
・以下のソースを pg.php という名前で例えば /cgi-bin 下に保存する(スクリプトの文字コードを EUCにすること)。ソースのダウンロードはこちらから右クリックで保存(注:拡張子は txtになっています)。
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>簡易アドレス帳(PostgreSQL-PHP)</title> </head> <body> <?php $dbname = "test"; $user = "postgres"; $passwd = "postgresdbpw"; $tbname = "addrbook"; $host = "localhost"; $conn = pg_connect("host=$host user=$user password=$passwd dbname=$dbname"); if (!$conn){ echo "データベースの接続でエラーが発生しました<BR>\n"; exit; } $result = pg_query($conn, "select name,telno,email from $tbname"); if (!$result) { echo "検索でエラーが発生しました<BR>\n"; exit; } $num = pg_num_rows($result); echo "<table border=\"1\">\n"; echo " <caption>簡易アドレス帳(PostgreSQL-PHP)</caption>\n"; echo " <tr><th>名前</th><th>電話番号</th><th>メールアドレス</th></tr>\n"; for ($i = 0; $i < $num; $i++) { $row = pg_fetch_row($result, $i); echo " <tr>\n"; echo " <td>" . $row[0] . "</td>\n"; echo " <td>" . $row[1] . "</td>\n"; echo " <td>" . $row[2] . "</td>\n"; echo " </tr>\n"; } echo "</table>\n"; pg_close($conn); ?> </body> </html>
・ブラウザで「http://ホスト名/cgi-bin/pg.php」にアクセスし、Perlの場合と同様の表示が出れば OK である。
(注) ・php.iniで extension=php_pgsql.dll を設定する必要がある(1桁目の ; を削除)。
・PHPでは文字コードに十分注意しないと文字化けが起き易い(php.iniの設定、スクリプトやデータの文字コード等々)。
・スクリプトの文字コードをどうしても Shift-JISで統一したい場合には、以下のように設定する。
(1) dataフォルダの postgresql.conf ファイルの 248行目を以下のように変更し、PostgreSQLを再起動する。
#client_encoding = sql_ascii
client_encoding = SJIS (#を削除し、sql_ascii -> SJIS)
(2)スクリプトの文字コードを Shift-JISにし、META行を「charset=Shift_JIS」に変更する。
- 他のホストからのアクセス
PostgreSQLサーバはデフォルトでは同一ホスト(localhost)からのアクセスしか許可していない。Webサーバも同じホスト上で動作していれば、クライアント(ブラウザ)のホストは LAN内でもインターネット上でもどこからであっても、直接アクセスするのは同一ホストの Webサーバなので問題はないが、例えば、Webサーバが 192.168.0.2, PostgreSQLが 192.168.0.3のように異なるホストのときは、設定変更が必要なので注意すること。
まず、CGIスクリプトでは、上記の pg.cgiや pg.php の例では $host = "localhost"; ではなく、$host = "192.168.0.3"; のように PostgreSQLサーバのIPアドレスまたはホスト名を記入する。
一方、PostgreSQL側では、dataフォルダの下の pg_hba.conf ファイルに以下のように設定を追加し、PostgreSQLを再起動する。ただし、psql などからアクセスして
psql: fe_sendauth: authentication type 5 not supported
のようなエラーが出るときは、md5 -> trust に変更する。
# IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 192.168.0.3/32 trustこの例は 192.168.0.3 からのアクセスのみを許可するように追加した場合である。もし 192.168.0.* から許可するなら、192.168.0.3/32 ではなく 192.168.0.0/24 とする。また 192.168.*.* から許可するなら、192.168.0.0/16 とする(このあたりの表記方法がわからなければ勉強が必要)。
また、dataフォルダ下の postgresql.confファイルの listen_addresses行を以下のように localhost -> * に変更する(変更後は PostgreSQLを再起動)。
# - Connection Settings -
listen_addresses = 'localhost' -> '*'
Excelなどから PostgreSQLサーバに ODBC接続する場合にも、同一ホストからでなければデフォルトではアクセスできないので上記の pg_hba.conf, postgresql.conf ファイルに追加する。
PostgreSQLが動作しているサーバ機でファイアウォールソフトが動作しているときは、ポート5432番を開放すること。
- phpPgAdmin のインストール
MySQLの phpMyAdminと同様に、PostgreSQLでは phpPgAdminという PHP上で動く管理ツールがある、これを使うとブラウザ上からDBの操作・管理ができ、大変便利である。
phpPgAdmin のインストール手順は以下の通りである。
・phpPgAdmin のホームページ http://phppgadmin.sourceforge.net/ から phpPgAdmin-3.x.x.zip の最新版をダウンロードする。2005.2現在、phpPgAdmin-3.5.2.zip が最新版である。
・上でダウンロードしたファイルを例えばドキュメントルート(C:\www)下に解凍する(C:\www\phpPgAdmin となる)。
・C:\www\phpPgAdmin\conf の下の config.inc.php-dist をコピーして config.inc.php を作成し、47行目を true -> false に変更する。
$conf['extra_login_security'] = false;
もし、Webサーバと PostgreSQLサーバが別ホストなら、17行目を以下のように設定する。
$conf['servers'][0]['host'] = 'PostgreSQLのホスト名またはIPアドレス';
・http://ホスト名/phpPgAdmin/index.php
にアクセスすると「ユーザ名/パスワード」入力ダイアログが表示される。「ユーザ名」postgres、「パスワード」postgresdbpw を入力し、「ログイン」ボタンをクリックすれば「ようこそphpPgAdminへ」のページにアクセスできる。その後の使い方は各自で調べてください。。
(注) 他のホストからアクセスする必要がなければ phpPgAdminをインストールしなくても PostgreSQLインストール先にある pgAdmin III を使うといいかもしれない。
- Movable Type でデータベースを PostgreSQLにしたいなら
Windowsで Movable Typeを動かすに書いたように、Movable Type用のデータベースとしては BerkeleyDB や MySQL が使えるので、PostgreSQLの出番はほとんどないとと思うが、Windowsで PostgreSQLが使えるようになったので、選択肢の一つにはなった。一応設定方法を書いておく。
・データベース名:MTの作成
C:\Program Files\PostgreSQL\8.0\bin>createdb -U postgres MT
Password: postgresdbpw
CREATE DATABASE
・mt.cfgファイルでドライバを指定
ObjectDriver DBI::postgres
Database MT
DBUser postgres
・PostgreSQLのパスワードを設定 mt-db-pass.cgiファイルの1行目に postgresdbpw と記入。
・上記の設定後に、http://ホスト名/MT/mt-load.cgi を実行してデータベースを初期化し、その後、http://ホスト名/MT/mt.cgi にアクセス。
- La!coodaWiz でデータベースを PostgreSQLにする
Windowsの La!coodaWizでは DBは専ら MySQLが使われ、PostgreSQLを使ったという紹介は見つからない。La!coodaWizのフォーラムでも誰か知らないかという質問が出るくらいである。筆者は La!coodaWizを MySQLで試したことはあるが、実際に使っているわけではなく、PostgreSQLでの動作確認もしたことはなかった。試しにあれこれやっているうちにあっけなく動作したのでフォーラムで紹介した。以下で yito の名前で投稿しているのは筆者である。興味があればそちらを見て欲しい。
http://wiz.syscon.co.jp/xoops/modules/newbb/viewtopic.php?topic_id=492&forum=1
- 関連情報へのリンク
日本PostgreSQLユーザ会
PostgreSQL日本語ドキュメント
ML過去ログ(pgsql-jp 保存書庫)
PostgreSQLメーリングリスト全文検索システム
PostgreSQL Installer
Running & Installing PostgreSQL On Native Windows FAQ
本ページのサンプルは以下を参考にさせてもらった。
@IT PostgreSQLをプログラムで操作する