PostgreSQL導入パッケージ完全ガイド

PC UNIX の種類に応じて各種 PostgreSGL パッケージが用意されています.本章では,それぞ
れのパッケージの特徴とその入手/導入の方法を個別に解説します.
Linux RPM 編
●渋谷寿夫 SHIBUYA Hisao E-mail : [email protected]
筆時点では7.0 beta5のパッケージが出ています.
はじめに
特徴
RPM とは Red Hat Package Manager のことです.
Red Hat という言葉が入っていますが,GPL のもと
RPM 版 PostgreSQL は現在 Lamar Owen 氏によっ
で公開されているパッケージを管理するためのソ
てメンテナンスされており注1,本家FTPサイトより
フトウェアです.RPM を利用することができる
取得可能です.筆者がメンテナンスしている日本語
Linux のディストリビューションには Red Hat
対応版の主な特徴は- - with-mb=EUC_JP(7.0 では- -
Linux,LASER5 Linux,Vine Linux,Kondara
enable-multibyte=EUC_JP)オプションを付けて
MNU/Linux などがあります.RPM で提供される
configureすることによりデータベース中に日本語を
パッケージには,ソースコードから簡単に再構築
利用することが可能になっています.それ以外には
できるソースコード形式と簡単にインストール/
㈱ SRA の石井氏のサイト注 2 にある jumbopatch の適
アップグレードできるバイナリ形式があります.
応,pgaccessのkinput2対応,psqlの日本語版(psqlj)
ここでは RPM を利用して,PostgreSQL を実際にイ
の導入が元のパッケージから変更している,といっ
ンストールし利用するまでの方法を説明します.
た特徴があります.現在公開されている RPM 版で
筆者が PostgreSQL のパッケージを VinePlus など
はインストール後のデータベースの初期化が自動で
に提供し始めたきっかけは,Cobalt などの Red Hat
行われるようになっており,すぐにデータベースを
LinuxベースのサーバでPostgreSQLを使う必要があ
使うことが可能となっています.また,PostgreSQL
ったことです.本誌'99年 5月号の特別企画「Cobalt
標準のインストールとディレクトリ構成が大きく異
をもっと使いこなす」でも RPM を使ったカスタマ
なるため,通称「シーラカンス本注 3」などの PATH
イズ方法を執筆しましたが,どうせなら RPM 化し
は読み替える必要があります.
て公開しようということで作成しました.当時は
6.4 をベースに作成していましたが,早いもので執
RPM でインストールされるファイルのディレク
トリ構成を表 1に示します.
注 1)http://www.ramifordistat.net/postgres/
注 2)ftp://ftp.sra.co.jp/pub/cmd/postgres/6.5.3/patches/
注 3)
『改訂版 PU UNIX ユーザのための PostgreSQL 完全ガイド』/石井達夫/技術評論社/ ISBN4-7741-0890-1
58 - Software Design
c h a p t e r
6
●表 1 インストールされるファイルのディレクトリ構成
/usr/bin
実行ファイル(postmaster,psql,postgres など)
/usr/lib
ライブラリ(ibpq.so,libpgtcl.so など)
/usr/lib/pgsql
PGLIB に設定するディレクトリ
/var/lib/pgsql
PGDATA に設定するディレクトリ(データベースが格納されています)
/usr/doc/postgresql-{version}
ドキュメント
●表 2 glibc のバイナリパッケージ入手先
●図 1 glibc のバージョンチェック
glibc 2.0
http://alpha.or.jp/Vine/VinePlus/
glibc 2.1
http://alpha.or.jp/Vine/VineSeed/
$ rpm -q glibc
glibc-2.1.2-17vl2
glibc-2.0.7-29
[glibc 2.1]Vine 2.0beta2
[glibc 2.0]Vine 1.1
もしすでに postgresql が存在した場合は rpm -e
入手/導入
を実行して,インストール済みのパッケージをア
ンインストールします注 6.
インストールはパッケージの中から必要なもの
現在巷で使われているLinuxはglibcのバージョン
注4
によって大きく 2 つに分けることができます .
を選択することができます.postgresql-6.5.3_ jp-2
Red Hat Linux 5.xベースのものと6.xベースのものが
.i386.rpm をインストールする場合は,
あり,5.xで作成したバイナリパッケージは 6.xでは
利用できない場合があります.今お使いの glibc の
# rpm -ivh postgresql-6.5.3_jp-2.i386.rpm
バージョンによって適切なバイナリをダウンロード
とするとインストールできます.PostgreSQL を利
してください.glibcのバージョンを調べるには図1
用するには,
のように実行します.バイナリパッケージは表2の
URL から入手してください.他には ftp://ftp.
¡postgresql-6.5.3_jp-2.i386.rpm
¡postgresql-server-6.5.3_jp-2.i386.rpm
vinelinux.org/の VinePlus,VineSeed 内にもあり
ますので近くのミラーサイトから入手可能です.
の 2つのパッケージが必要です.
入手可能な PostgreSQL のファ
イル群とパッケージの中身は表 3
●表 3
PostgreSQL のファイル群とパッケージの中身
postgresql-6.5.3_jp-2.i386.rpm
クライアントプログラムやライブラリ
postgresql-server-6.5.3_jp-2.i386.rpm
データベースの作成や実行に必要なサーバなど
postgresql-devel-6.5.3_jp-2.i386.rpm
ヘッダファイルやライブラリ
postgresql-tcl-6.5.3_jp-2.i386.rpm
pgaccess などの Tcl ベースのプログラム
すでにお使いのシステムに
postgresql-odbc-6.5.3_jp-2.i386.rpm
ODBC ドライバとサンプルファイル
PostgreSQL がインストールされ
postgresql-jdbc-6.5.3_jp-2.i386.rpm
JDBC 用 jar ファイル
postgresql-perl-6.5.3_jp-2.i386.rpm
Perl ベースのプログラムとライブラリ
$ rpm -qa | grep postgresql
postgresql-python-6.5.3_jp-2.i386.rpm
Python ベースのプログラムとライブラリ
$ ls /var/lib/pgsql
postgresql-test-6.5.3_jp-2.i386.rpm
regression test用パッケージ
注5
の通りです .
新規インストール
まず,インストールする前に,
ているかチェックします.
注 4)libc ベースの Red Hat Linux 4.x をお使いの人もいると思いますが,現状では 5.x ベースか 6.x ベースが大半だと思います.
注 5)Vine Linux 2.0CR Official 製品版には残念ながら筆者が作成したパッケージは含まれていません.
注 6)詳細は http://www.ramifordistat.net/postgres/rpm_install.html を参照.
Jun.
2000 - 59
データベースの初期化は,
で削除します.このあと,
# /etc/rc.d/init.d/postgresql start
$ rpm -ivh[パッケージ名]
とすることで initdb を自動で行い,postmaster を起
で新しいパッケージをインストールします.
動します.後は psql template1 で動作確認をしてく
ださい.
バージョンアップ
[6.4.2 の場合]
ディレクトリを移動します.
$ cd /var/lib; cp pgsql pgsql.orig
すでに Red Hat 5.2 や 6.x に付いている RPM 版の
PostgreSQL からアップグレードするには,インス
トールされているバージョンによって2 つの方法に
つづいて,
$ rpm -Uvh
分かれます.
Red Hat 6.1などに含まれるメジャーバージョンが
同じ場合(たとえば6.5から6.5.3)は rpm -Uvh でア
ップグレードするだけで終了です.Red Hat 5.2など
のメジャーバージョンが違う場合は pg_dumpall/
initdb/psql -e template1 < db.bak の手順でバックアッ
で新しいパッケージにアップグレードしたあと,
データベースフォーマットの変換を行います.
$ initdb --pglib=/usr/lib/pgsql --pgdata=
/var/lib/pgsql)
(実際は 1 行です)
プしたデータを新しいデータベースに戻す必要があ
ります.実際の手順は以下の通りです注7.
最後に,どちらのバージョンも,
“postgres”ユー
ザで
まず,“postgres”ユーザで下記のコマンドを実
行します.
$ psql -e template1 <db.bak
$ pg_dumpall > db.bak
でバックアップしてあるデータを戻します(マイ
$ /etc/rc.d/init.d/postgresql stop
ナーバージョンアップの場合は必要ありません)
.
以下の作業は,バージョンによって違うので,
おわりに
注意してください.
[6.3.2 の場合]
ディレクトリを移動します.
$ cd /var/lib/; mv pgsql pgsql.orig
つづいて,postgresql rpms をアンインストール
します.
$ rpm -qa|grep postgres
を実行して見つかったものをすべて
$ rpm -e[該当ファイル名]
駆け足で RPM 版 PostgreSQL について説明しま
した.これから利用されるかたにはインストール
の手間を軽減する良い手段だと思います.すでに
別のバージョンの PostgrSQL が動作しているかた
は,アップグレードの際にはしっかりバックアッ
プを取って作業を開始するようお願いします.
筆者はこの原稿を書き上げてから 7.0 のパッケー
ジ化に本格的に取りかかりますので,ご意見ご希
望をお聞かせいただければと思います.きっと,
本誌が書店に並ぶころには,6.5.3 と 7.0 のパッケー
ジが提供できていることでしょう.
注 7)詳細は http://www.ramifordistat.net/postgres/rpm_upgrade.html を参照.
60 - Software Design
c h a p t e r
6
Plamo Linux 編
●くわむらじゅん KUWAMURA Jun E-mail : [email protected]
make して install し,それから使いはじめるという
はじめに
のは,ごくあたりまえのことですが,筆者のよう
にあちこち(会社と自宅の端末)に何度も make,
Plamo Linux への PostgreSQL + PHP + Apache の
パッケージのコントリビュートも,早いもので 3 年
注8
目となりました .
install するのはとても退屈なことです.
相互関係を持つ複数のプログラムだったり,設
定を必要とするサーバプログラムだとなおさらう
その間に PostgreSQL のリリースも 6.2 から 6.5 へ
んざりします.DBMS はまさにそういう類のプロ
と変わり,この記事を皆さまが読まれるころには,
グラムで,初心者にとっては利用に至るまでのハ
7.0 が公式リリースとなっているはずです.この間,
ードルが高過ぎるような気がしていました.
SQL92 への準拠も充実してきていますし,当初パ
同じようなことを,さらに何人もの人がするこ
ッチであった日本語の検索のための正規表現やマ
とを考えると,パッケージにすることによりその
ルチバイト拡張が本体に採り入れられるなど国際
無駄がずいぶん減ると思いついたのは当然のなり
化も着実に進んできています(Appendix1 を参照)
.
ゆきだったのでしょう.逆の立場になれば,ちょ
また,国内での PostgreSQL を取り巻く環境も,
っと使ってみたくなったプログラムがコマンド1 つ
Linux に代表されるオープンソースの人気の高まり
でインストールできるのでとても助かります.自
とともに,日本 PostgreSQL ユーザ会が設立された
分で普段よく使うプログラムは自分でパッケージ
り,企業による商用のサポートが始まったりと大
にして,その他はだれかがパッケージしてくれた
きく変化してきました.
ものを使うといったことが気軽にできるのが,
Plamo Linux は Slackware 3.x をベースにこじまみ
Plamo Linux の良さです注 10.
つひろ氏の個人的な趣味と研究の材料として,
1FD ブートやノート用のインストールセット,初
入手/導入
心者向けお勧めパッケージ選択などさまざまな実
験に使われてきました.その中でとくに日本での
PostgreSQL パッケージを含む Plamo Linux(以下
Linux ディストリビューションに影響を与えたのが
Plamo)の入手は,ftp://ftp.linet.gr.jp/
地域化(L10N)
,すなわち日本語化でした.
pub/Plamo/もしくは,ftp://plamo.linet.gr.
現在は,glibc2 国際化(I18N)ライブラリの試験
jp/pub/からどうぞ.あるいは,石井達夫氏著の
実装のプラットフォームともなっていて,その
『改訂版 PC UNIX ユーザのための PostgreSQL 完全
Plamo Linux 2.0 のリリースもそろそろです注9.
攻略ガイド』や雑誌の付録などから入手可能です.
筆者が PostgreSQL とその関連パッケージで
また,http://www.linux4u.net/では有償で各種
Plamo Linux に貢献をはじめたのも個人的な趣味で
Linux キットの CD-ROM 配布サービスを行ってい
した.フリーソフトウェアをソースコードから
て,ここでも Plamo の入手が可能です.
注 8)「PostgreSQL + PHP + Apache」の組み合わせによる利用法については 3 章を参照してください.また Plamo へのコントリビュー
トは石井達夫氏による紹介をきっかけに,本誌'98 年 12 月号と'99 年 1 月号の特集記事でも取り上げられ,本誌別冊『すみからすみ
まで Linux』にも収録されています.石井達夫氏著『PC UNIX ユーザのための PostgreSQL 完全攻略ガイド』(ISBN4-7741-0890-1)
には Plamo Linux の CD-ROM が付録となっています.
注 9) glibc-2.1 の 2 バ イ ト NLS( Native Language Support) に 日 本 語 locale を 実 装 す る た め の Linux 研 究 会 NLS 分 科 会
(http://sv.linuxjp.org/Project/index.html)をはじめ,li18nux という Linux 国際化ワーキンググループ(http://www.li18nux.org/)も'99
年 9 月に立ち上がっています.
注 10)Plamo Linux については,http://www.linet.gr.jp/~kojima/Plamo/にその情報があります.Plamo Linux 版 PostgreSQL パッケージの
情報は,http://www.linet.gr.jp/~juk/plamo/を参照してください.
Jun.
2000 - 61
●表 4
Plamo Linux の PostgreSQL 関連パッケージ
PostgreSQL パッケージ類(contrib/Database/)
② contrib/Database/*.tgz
③ contrib/Database/Perl5/*.tgz
pgsql653+.tgz
本体パッケージ
pgsql653-contrib.tgz
contrib パッケージ(+ geometory)
pgsql653-pgaccess.tgz
pgaccess フロントエンド GUI
pgsql653-odbc.tgz
Linux ODBC ドライバ
pgsql653-perl5.tgz
Perl5 Pg-1.8.1 モジュール
をマウントし,installpkg コマンドで個々のパッケ
pgsql653-python.tgz
Python-1.5 PyGreSQL-2.4 モジュール
ージをインストールします.あるいは,pkgtool を
pgsql653-pgbash2.tgz
pgbash-2.0.1 組み込み bash-2.0.3
各ディレクトリごとに起動して,ユーザインターフ
pgsql653-jdbcce.tgz
文字エンコード JDBC ドライバ
ェースからインタラクティブにパッケージのインス
Perl5 DBI モジュールパッケージ類(contrib/Database/Perl5/)
DBI113.tgz
Perl5 DBI(DataBase Interface)モジュール
DBDPg093.tgz
Perl5 PostgreSQL DBD(DataBaseDriver)
モジュール
<以下は DBI::Proxy 関係>
PlRPC02012.tgz
Perl RPC(Remote Procedure Call)
NetDaemon028.tgz
ポータブルサーバ用のクラス
Storable065.tgz
データ整合性のための拡張
CompressZlib106.tgz
zlib 圧縮ライブラリのインターフェース
アプリケーションパッケージ類(contrib/Database/Sample/)
pgbench11.tgz
PostgreSQL トランザクションベンチマーク
pgimage12.tgz
PHP 連携画像管理システム Web UI
pgpost132+.tgz
郵便番号検索(大口事業所付き)Web UI
Web との連携用パッケージ類(contrib/WWW/)
④ contrib/Database/Sample/*.tgz
のようにしてください注 11.
Plamoをインストールして注 12 再起動後,CD-ROM
トールを選択することも可能です.
たとえば,pgsql653+.tgz を installpkg を使ってイ
ンストールする場合は,
# mount /cdrom
# cd /cdrom/contrib/Database
# installpkg pgsql653+.tgz
のようにコマンドを入力します(cd しなくてもパ
ッケージファイルの正しいパス名を指定すれば大
丈夫です).pkgtool を使ってインストールする場
合は,
# mount /cdrom
# cd /cdrom/contrib/Database
# pkgtool
apach1312.tgz
Apache Web サーバ 1.3.12
とすると,文字端末上で全画面のインターフェー
php3015j.tgz
PHP3 ハイパーテキストプリプロセッサ
3.0.15-i18n-ja
スが立ち上がりますので,表示に従ってキーを押
gd181j.tgz
PNG 作製高速グラフィクスライブラリ
GD-1.8.1
したディレクトリのすべてのパッケージについて
gdbm180.tgz
Gnu DBM ライブラリ glibc2 版
w-agora301.tgz
W-AGORA Web 掲示版システム
してインストールをします.pkgtool の場合,指定
インストールするかどうかの確認をしてきます.
特徴
Plamo の PostgreSQL 関係パッケージには表 4 の
ようなものがあります.
そして,インストールの順番は,
① contrib/WWW/*.tgz
Plamo の PostgreSQL パッケージの特徴の 1 つは,
初期のころより Web との連携を意識した構成にし
て,連携に使う PHP サーバサイドスクリプトと
ApacheWeb サーバとを PostgreSQL 用のパッケージ
注 11)PHP,GD は TTF,ZLIB,PNG,JPEG,Xpm などのライブラリを使っていますが,すべて Plamo のお勧めインストールで組み
込まれているはずです(plamo/xap1/freetype.tgz や plamo/xap1/libgr.tgz などです).
注 12)たいていの場合,Plamo Linux のインストールは CD-ROM からブートしたあと root でログインして setup コマンドを実行すると,
文字端末上の全画面メニューによるインストーラからインタラクティブに行えます.お勧めセットを選択すると基本的なインスト
ールは 30 分程度で完了するでしょう.誌面に収まらなかったインストール直後のローカルサイトのインデクスページが http://
www.linet.gr.jp/~juk/plamo/sample/にあります.
62 - Software Design
c h a p t e r
6
として用意したことです.PostgreSQL 6.2 + PHP/
のできる pgimage は本当はサンプルではなく,実
FI2.0 + Apache 1.2 で始めたころのパッケージでは,
際に役立つアプリケーションなので,これらがす
Apache のモジュールとして PHP/FI をリンクして
ぐに利用可能な状態にあるということは新たな価
いたため,Apache は単体では動かせませんでした
値を加えることにもなると思いました.
(3 章を参照).PHP や PostgreSQL のライブラリを
あえて付け加えるとすれば,月並ではありますが,
必要とする,まさに実験的なパッケージで、汎用
アプリケーション開発用の利用を前提としていろい
の Linux 配布キットにバンドルすることは考えにく
ろなプログラミング言語のインターフェースを用意
いことでしたが,Plamo のおかげでそれが実現し
してあることです.C,C++ のライブラリはもちろ
ました.
ん,Perl,Python,Tcl/Tk,Ruby のモジュール,
Apache が DSO(Dynamic Shared Object)をサポ
ODBC/JDBCドライバ,ecpg埋め込みSQLプリプ
ートするようになってからは,Apache を単体でイ
ロセッサ,pl/pgsql,pl/tclストアドプロシージャな
ンストールしておき,あとから PHP3 モジュールを
どが用意されています.Webとの連携のために,す
インストールすることが可能となりましたので,
でに述べたサーバサイドスクリプトの書ける PHP3
Apache の独立性は確保できるようになりました.
ハイパーテキストプリプロセッサと Apache Web サ
最新のパッケージでは,PHP 国際化チームによる
ーバもパッケージとして用意してます.Perl に関し
日本語化パッチの当てられた PHP-3.0.15j-i18n-ja に
ては PostgreSQL 標準の Pg モジュールのほかに,
PostgreSQL,GDBM,GD-1.8.1 などのライブラリ
Perl DBI とともに DBD-Pg ドライバも用意してあり
をリンクした構成となってますが,そのほかの外
ます.ユーザインターフェースのフロントエンドプ
部ライブラリを利用したい場合は再インストール
ログラムは,PostgreSQL 標準 GUI の psql およびそ
が必要となります.
の日本語版 psqlj,GUI の pgacess のほか,最新のパ
2 つ目の特徴は,できるだけ日本語化された内容
ッケージには bash コマンドラインから直接
を盛り込んだことです.PostgreSQL 日本語ドキュ
PostgreSQL に問い合わせができる pgbash シェルも
メントプロジェクトで日本語化されたマニュアル
用意してあります(2章を参照)注13.
のほか,かつては共有ライブラリ化された gawk の
日本語正規表現をリンクしたりして,できるだけ
おわりに
日本語の情報を盛り込むようにしました.日本語
化は,ちょうど Plamo が指向していたところでも
てみじかに Plamo Linux 版 PostgreSQL とそれに関
ありました.現在,日本語の文書として,FAQ 和
するパッケージについてご紹介しました.すでに
訳, 和訳チュートリアル,PostgreSQL 日本語ドキ
7.0 もリリースとなっていることでしょう(1 章を参
ュメントプロジェクトによる和訳文書などを収め
照).PostgreSQL 単体でのバイナリアーカイブはす
ています(Appendix 2 を参照)
.
でに作ってありますので,試してみたいかたはそち
もう 1 つの特徴は,インストールコマンド
らもどうぞ.デフォルトの設定で,インストール済
(installpkg)1 発で始められるようにインストーラ
みのパッケージと共存できるように,デフォルトポ
を記述したことです.インストールしてすぐに利
ート番号を 7654 に変えてあります.これから,7.0
用可能になっているため,サンプルアプリケーシ
ベースで新たにパッケージセットを作り始めること
ョンをすぐに試すことができます.石井達夫氏に
になりますが,皆さまのご意見ご要望をお聞かせい
よる郵便番号検索の pgpost やイメージデータ記録
ただければと思います.
注 13)最新版では,PostgreSQL 6.5.3 に有用と思われるパッチを当て,--with-mb=EUC_JP オプションにて構成してあります.パッチ
は,石井氏の保守する㈱ SRA の FTP サイトにある rtree.patch,lock.patch,xid.patch,ecpg.patch,vacuum.patch,date.patch
(remove_prosrc_idx_6.5.2.diff は DB の互換を維持するために当てていません)と,psql,pgaccess,odbc の日本語パッチ,なら
びにインターウィズの片岡氏による rtree 拡張を含むパッケージ geometric です(4 章を参照).これらのパッチ類は,ftp://ftp.sra.
co.jp/pub/cmd/postgres/6.5.3/patches/,http://www.interwiz.koganei.tokyo.jp/software/geometric/,http://www.linet.gr.jp/~juk/plamo/
parts/srcs/dbms/pgsql/653/で見つかります.
Jun.
2000 - 63
Debian GNU/Linux 編
● Debian Project 武藤健志 Kenshi MUTO E-mail : [email protected]
APT または Debian オフィシャル CD-ROM からイン
はじめに
ストールします.dselect から選択すると,libjpeg
g6a,libreadlineg2 などのいくつかの依存,推奨パ
ッケージも表示されます.必要に応じてインスト
Debian にはじめて PostgreSQL のパッケージが収
ールしましょう.
録されたのは,コードネーム slink(Debian バージ
postgresql パッケージをインストールすると,日
ョン 2.1)からです.このときの PostgreSQL は日本
語 EUC にも対応しているバージョン 6.3.2 で,
付の形式を European スタイルにするか American ス
PHP3 などの PostgreSQL と連携可能なパッケージ
タイルにするか尋ねられます.
“e”
(European)か
も同時に収録されました.筆者も,PostgreSQL と
“a”
(American)のどちらかを入力して • を
PHP の連携には非常に興味を持っていたこともあ
押すと設定が終了します.
り,さっそくインストールして自著のサポートペ
potato / woody の場合
ージなどに活用しています.
執筆時点でまだリリース準備段階のコードネー
まず,/etc/apt/sources.list ファイルにパッケー
ム potato(Debian バージョン 2.2)には,Postgre
ジのダウンロード先を設定します.たとえば次の
SQL バージョン 6.5.3 が収録されています.Debian
ように指定します.
Project は,リリース準備期間はバグ修正に専念し,
deb ftp://ftp.jp.debian.org/debianwoody
テストの未成熟な新しいバージョンは極力収録し
main contrib non-free
ない方針を取っていますので,potatoにはこのまま
(実際は 1 行です)
6.5.3 を収録することになりそうです.
ただ,リリース準備期間中でも,新たに作成さ
ftp://ftp.jp.debian.org/debian/の代わり
れた開発版ブランチ woody(Debian バージョン
に表 5 に挙げたようなミラーサイト URL からも取
3.0 ?)には新しいバージョンの登録は許可されて
得できます.最も近いと思われるサイトを設定し
いるので,こちらには PostgreSQL バージョン 7.0
ておくとよいでしょう.
も正式に登場しだいパッケージとして収録される
設定が終わったら/etc/apt/sources.list ファイル
でしょう.
を保存し,次のコマンドを実行して,APT の情報
を更新します.
入手/導入
# apt-get update
Debian のパッケージ管理能力については定評が
ありますが,とくにパッケージ管理ツール APT は
PostgreSQL のパッケージ名は,postgresql です.
●表 5
主な Debian アーカイブミラーサイト注 14
強力です.これさえ使えば,PostgreSQL の最新パ
http://ring.asahi-net.or.jp/archives/linux/debian/debian
ッケージのダウンロード,インストール,設定す
http://sunsite.sut.ac.jp/pub/archives/linux/debian
べてを半自動的に行えます.
slink の場合
postgresql パッケージ(バージョン 6.3.2-15)を
http://mirror.nucba.ac.jp/mirror/debian
ftp://debian.softagency.co.jp/debian
ftp://dennou-h.ees.hokudai.ac.jp/library/Linux/debian
注 14)http://www.debian.or.jp/Link.html により詳しい一覧があります.
64 - Software Design
c h a p t e r
6
ライブラリは libpgsql2 パッケージとして別パ ●図 2 postgresql パッケージアップグレード時の警告
ッケージになっています.potato 以降では機
能ごとにパッケージが分割されており,psql
コマンドや createdb コマンドなどのクライア
ント系のファイルを集めたpostgresql-clientパ
ッケージ,PostgreSQLに関するドキュメント
の postgresql-doc パッケージ,プロシージャ
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
ecpg libpgsql2 libpgtcl pgaccess postgresql postgresql-client
postgresql-contrib postgresql-doc postgresql-pl tcl8.0 tk8.0
The following NEW packages will be installed:
ecpg libpgsql2 libpgtcl pgaccess postgresql postgresql-client
postgresql-contrib postgresql-doc postgresql-pl task-database-pg tcl8.0
tk8.0
0 packages upgraded, 12 newly installed, 0 to remove and 15 not upgraded.
Need to get 0B/4432kB of archives. After unpacking 13.1MB will be used.
Do you want to continue? [Y/n]
言語 PL/pgSQL を追加する postgresql-pl パッ
ケージ,いろいろな拡張を施すpostgresql-contribパ
potato への変更点として,データベースを配置する
ッケージといったものが用意されています.
ディレクトリが/var/postgres/data/から/var/lib/
また,これらのいくつかのパッケージをまとめ
postgres/data/に移動しています.
てインストールする task-database-pg パッケージも
このため,postgresql パッケージのアップグレー
用意されています.ここではこのパッケージをイ
ドの時点で図2 のような警告が表示されます.とり
ンストールする注 15 ことにしましょう.次のコマン
あえずここは • を押して先に進みます.設
ドを実行します.
定のところでは,次のように/etc/postgresql/
# apt-get install task-database-pg
実行すると,このまま継続するか尋ねられます
ので,• を押して継続しましょう.
つづいて,postgresql パッケージの設定として,
postmaster.init を置き換えるか尋ねられます.新し
い形式になっているので,
“y”と入力して •
を押します.
つづいて,古いバージョンのデータベースを新
しいバージョンに移行する作業を手作業で行いま
利用するエンコーディングを尋ねられます.日本
すが,パッケージのバグのため,/usr/share/doc/
語を利用するのであれば,EUC_JP あるいは UNI
postgresql/README.Debian.migration.gz のとおり
CODE を指定します.
にはきちんと動かないようです.
最後に利用する日付の形式を尋ねられます.こ
そこで,次のような手順で移行作業を行います.
こで指定するのはどれでもかまいません.
これで設定は終わりです注 16.
slink から potato / woody へ
slink から potato および woody へのアップグレー
ドは,かなり大幅な変更を要します.具体的には
APT に potato あるいは woody へのダウンロード設
定を記述し,次のコマンドでアップグレードを実
行します.
# apt-get update; apt-get dist-upgrade
PostgreSQL は,バージョンが変わるとデータベ
ースの互換性が失われます.また,slink から
手順 1
root 権限で,失われているシンボリックリンク
を復旧します.
# cd /usr/lib/postgresql/dumpall/6.3
# ln -s postgres postmaster
手順 2
postgres ユーザ権限になって,次のコマンドを実
行します.
$ postgresql-dump -t db.out -dcilp $PGDATA/
../data.save
(実際は 1 行です)
注 15)ここでのインストール設定は,PostgreSQL 6.5.3 での手順ですが,7.0 の場合も大きな違いはないでしょう.APT のダウンロー
ド先に「woody」を選択しているので,7.0 が登録されるとそれがインストール対象になります.
注 16)/etc/apt/sources.list の設定をそのままにしておくと,PostgreSQL 以外のパッケージもすべて woody からダウンロードします.こ
れを避けたいときには,/etc/apt/sources.list から woody のダウンロード設定をコメントアウト(行頭に # を付ける)して,apt-get
update を実行してから,ほかのパッケージのダウンロードを行ってください.
Jun.
2000 - 65
ここで,データベースの移行を行ってよいか尋
ねられますので“y”と答えておきます.
たとえばデフォルトではUNIX ソケット形式のみ
の接続を許可する設定になっていますが,TCP/IP
形式での接続を許可するには,/etc/postgresql/
手順 3
postmaster.init に「PGALLOWTCPIP=yes」を追加
カレントディレクトリにある db.out ファイルに
はエンコーディングの設定がされていないので,
します.
PostgreSQL は,ユーザ名 postgres で操作します.
登録中にエラーが発生するかもしれません.ファ
このユーザはパスワードロックされているので,
イルの中で「データベース名 with encoding=' ';」に
一度 root になったあと,su postgres で成り替わっ
なっている箇所を「データベース名 with encoding
て利用します.不便なので,postgres ユーザの状態
='EUC_JP';」 あ る い は 「 デ ー タ ベ ー ス 名 with
で createuser コマンドを使って適当なユーザを作成
encoding='UNICODE';」のように変更します.もう
したほうがよいでしょう.
1 度手順 2 を実行すると,正しくデータベースが登
録されます.
また,デフォルトの設定ではローカルホストか
らのアクセスを認証せずに許可しています.この
ため,ローカルホストに悪意を持つユーザがいた
手順 4
場合,簡単な手口でデータベースを破壊,改ざん
正常にできたようなら,バックアップされてい
る/var/postgresql/data.save/ディレクトリは消去し
てかまいません.
される可能性があります./etc/postgresql/
pg_hba.conf を適切に設定したほうがよいでしょう
(認証を trust から crypt にするなど)
.
PostgreSQL の設定
特徴
インストールが終わると,サーバプログラム
postmaster が起動します.もし,設定をあとから変更
圧倒的なパッケージ数を誇る Debian には,
したくなったときには,/etc/postgresql/postmaster.
PostgreSQL を取りまくさまざまなツール群もパッ
initを編集し,次のコマンドを実行します.
ケージ化されて収録されていますので,いろいろ
# /etc/init.d/postgresql restart
●表 6
使ってみるとよいでしょう(表6)
.
PostgreSQL 関連ツール
PHP3
PostgreSQL とは何かと縁のあるスクリプト言語 PHP3 ですが,PostgreSQL を扱うために php3-pgsql
(Apache サーバサイドページモジュール用)と php3-cgi-pgsql(CGI 用)の 2 つのパッケージが用意されて
います.また,PHP4 も収録しているので,これに対応した php4-pgsql パッケージも用意されています.
Perl
CGI プログラムなどでもよく使われるプログラミング言語 Perl ですが,PostgreSQL とのインターフェースも
もちろん用意されています.libpgperl パッケージをインストールすると,Pg モジュールがインストールされ
ます.
C 言語
postgresql-dev パッケージをインストールすると,C 言語のプログラムから PostgreSQL を呼び出すためのヘ
ッダファイルやリンクするライブラリファイルが用意されます.これらでもプログラムの開発は可能なのです
が,ecpg パッケージもインストールすると,さらに簡単に PostgreSQL を操作できます.
Tcl/Tk
スクリプト言語 Tcl と GUI ツールコンポーネント Tk は通常セットで使われますが,この言語セットから
PostgreSQL を呼び出すインターフェースが,libpgtcl パッケージとして用意されています.インストールする
と,pgtclsh と pgtksh の 2 つのコマンドが/usr/lib/postgresql/bin/ディレクトリに入ります.
Java
Java インターフェースは,libpgjava パッケージとして用意されています.
66 - Software Design
c h a p t e r
6
FreeBSD Ports / NetBSD Pkgsrc 編
●ふくはらいちろう FUKUHARA Ichiro Email : [email protected]
ウェアをインストールするように試みます.
はじめに
実際に Ports / Pkgsrc から構築するには,Ports /
Pkgsrcの中の該当するディレクトリに移動し「make
NetBSDの/etc/groupを眺めるとingresというエン
一発」だけでできてしまうのですが,あらかじめイ
トリを見つけることができます.近ごろは Post
ンストール直前までの状態を作り,このコンパイル
greSQLというデータベースがFreeBSDやNetBSDな
作業さえ省略できる packageというのも存在します.
どのUNIXライクなOSの上で問題なく動き業務にも
この package を使うと,ユーザはコンパイル済みの
活用されるようになってきましたが,その昔
バイナリファイルと設定ファイルやドキュメントな
PostgreSQL の元になったリレーショナルデータベー
どをいきなりインストールできてしまうので大変便
スマネージメントシステム(RDBMS)がINGRES 注17
利です.
さて,現在のところ FreeBSD Ports と NetBSD
という名前だったのです.
それでは,FreeBSD/NetBSDのPostgreSQLのイ
PkgsrcともにPostgreSQL 6.5.3ベースで作成されてい
ますが,内容が若干異なります.
ンストール手順を解説します.
FreeBSD Portsのほうは,${PORTSDIR}/database/
Ports / Pkgsrc について
postgresqlと${PORTSDIR}/japanese/postgresqlの2種
類が存在します注 19.前者は日本語非対応注 20 ですが,
FreeBSD や NetBSD などの UNIX ライクな OS で使
われる膨大な量のフリーソフトウェアは,そのほと
後者は日本語化されており,さらにODBCドライバ,
Tcl/Tk,Perlモジュールを組み込むことができます.
んどがソース形式で配布されています.それらを
NetBSD Pkgsrcのほうは${PKGSRCDIR}/database/
FreeBSD や NetBSD で動かすためには,自分のシス
postgresqlしかありませんが,これをそのまま使用す
テムに合わせてソースを改変してコンパイルする作
ると ODBC ドライバ,Tcl/Tk,Perl モジュールが入
業が必要です.たとえば,複数の計算機に同じソフ
っていない上にマルチバイト拡張もなされない素の
トウェアをインストールするとしたら,従来はこれ
PostgreSQL ができあがると思われます.これについ
ら煩雑な作業を繰り返し行う必要がありました.
ては対応版をsend-prしようと考えています.
この手順をまとめて自動化したものが FreeBSDで
注18
のPortsであり,NetBSDでのPkgsrcです .
次にFreeBSDの packageについてですが,Postgre
SQL は起動時に専用のユーザ ID /グループ ID で起
この Ports / Pkgsrc の中にはインターネット上に
動するので,あらかじめそのIDを作成しておく必要
存在する配布ファイルやそのパッチ,さらにインス
があります.しかしそのIDがFreeBSDのインストー
トールスクリプトやソフトウェアの簡単な説明など
ル直後には作られていないため,結局手動もしくは
も入っています.さらに目的のソフトウェアをイン
PostgreSQL の Ports の構築途中で作らなければなり
ストールする前に,システムにあらかじめ入ってい
ません.この ID の作成を前提とした package を作る
なければいけないようなプログラムがあったとする
ことはできないので,FreeBSD の package には
と,Ports/Pkgsrcはまずその関連付けられたソフト
PostgreSQL はありません.一方,NetBSD のバイナ
注 17)INGRES のマスコットキャラクターとして亀が使われていたことより,'99 年設立した日本 PostgreSQL ユーザ会のマスコットにも亀が使われて
います.INGRES 自体は現在でも商用版が発売されています.
注 18)実はソースコードから構築することは当然なことであり,逆に Ports / package ばかり使うのはあまり感心できません.しかし同じ作業ばかり
繰り返すことは効率性の面からも必ずしもよいことではないのも確かです.Ports システムにはシステムに合わせたパッチやツールが含まれてい
て,中身を見るだけでも勉強になります.ぜひこういう面からも活用していただきたいと思います.
注 19)${PORTSDIR}とは,Ports システムのインストールされたディレクトリです.通常は/usr/ports を使用します.
注 20)正確にいえばマルチバイト拡張のオプションを指定するように書かれていない Ports であるということです.
Jun.
2000 - 67
●表 7
PostgreSQL 関連 Ports の一例
pgaccess
pgaccess フロントエンド
リ package には存在します.これは必要なグループ
py-PyGreSQL
Python-PyGreSQL モジュール
IDなどが最初からあるからです.
ruby-postgres
Ruby モジュール
p5-DBI
Perl5 DBI モジュール
p5-DBD-Pg
Perl5 PostgreSQL DB ドライバモジュール
インストール
スクリプトは/usr/local/etc/rc.d/pgsql.sh にインス
トールされます.次回再起動時から PostgreSQL が
FreeBSD におけるインストール
自動で立ち上がります.
このほかに PostgreSQL 関連 Ports も存在します
前述の通りFreeBSDに関してはpackageが存在し
ないため,Ports によってソースから作成しなけれ
(表7)
.
ばなりません.FreeBSDをインストールしたときに
Ports システムをインストールしていない場合は,
Portsシステムもインストールしてください.
NetBSD におけるインストール
NetBSD の場合もインストール方法は,Pkgsrc と
FreeBSD の Ports システムをインストールする方
Binary Package の 2 つがあります.まずバイナリ
法はいくつかありますが,そのうち代表的なものを
package を ftp://ftp.jp.netbsd.org/pub/Net
あげてみます.
BSD/packages/1.4.2/i386/databases/postgres
ql-6.5.3.tgzから取得します.
● sysinstall
これは FreeBSD をインストールするときのイン
ターフェースと同じものを使って必要なソフトをイ
# /usr/sbin/pkg_add postgresql-6.5.3.tgz
を実行することによりインストールが完了します.
ンストールするものです./stand/sysinstall を起動
次に Pkgsrc による方法ですが,最初に Pkgsrc を
して,/usr/ports以下にPortsシステムをインストー
インストールしなければなりません.配布ファイル
ルできます.
を表8のサイトから取得することをお勧めします.
● FTP
して取得してもよいでしょう.更新された最新のツ
とくに NetBSD-current の場合は,anoncvs を利用
まず,ftp://ftp.jp.freebsd.org/pub/FreeBSD/
リーを取得することができます.詳細は http://
branches/-current/ports.tar.gzを取得し,任意の
www.jp.netbsd.org/ja/JP/Documentation/
場所に展開します.ただし/usr/ports 以下に展開し
anoncvs.htmlを参照してください.なお,取得した
たほうが,のちにPATHを変更する手間がなくなり
pkgsrc.tgz を展開すると,/usr/pkgsrc 以下に
ます.
NetBSD のPkgsrc システムが展開されます.
最後に/usr/pkgsrc/databases/postgresql に移動し
以上により FreeBSDの Portsシステムをインスト
て,make→make installでインストールは完了です.
ールできます.
さいごに
FreeBSDにおけるPostgresqlのインストール自体
は図3 のように実行すれば完了します.また,起動
●図 3
FreeBSD システムによる PostgreSQL のインストール
# cd /usr/ports/japanese/postgresql
# make MULTIBYTE=EUC_JP, USE_TCL=yes, USE_PERL=yes, USE_ODBC=yes
# make install
駆け足でFreeBSDとNetBSDにおけるインストー
ル方法をまとめてみました.PostgreSQL 7.0 もリリ
ースされたので,対応した Ports / Pkgsrc 作成の作
業を始めます.使いやすく高機能な
●表 8
NetBSD 用の Pkgsrc 入手先
1.4.2-RELEASE用
ftp://ftp.jp.netbsd.org/pub/NetBSD-1.4.2/source/sets/pkgsrc.tgz
current用
ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/pkgsrc.tar.gz
68 - Software Design
PostgreSQLの普及のためにご意見をいた
だきたいと思います.
c h a p t e r
6
Windows NT バイナリ編
ゆたか
●谷田豊盛 TANIDA Yutaka E-mail : [email protected]
にインストールしたものとして話を進めます.構
はじめに
成は図 4 のようになります.
次に,メニューに追加された cygwin B20 を実行
し,UNIX 環境として設定するためのディレクトリ
PostgreSQL は 6.4 までは UNIX のみの対応となっ
やファイルを用意します.
ていましたが,6.5 からは Cygnus Solutions より提
供されている cygwin を利用した Windows NT Ports
$ mkdir /etc
が Daniel Horak をはじめとした方々の尽力により
$ mkdir /tmp
正式にサポートされるようになりました。ここで
また,/bin は sh.exe が入っているディレクトリ
は Cygwin の簡単なインストールを含めて,筆者が
をマウントすると良いでしょう.
提供している PostgreSQL の Windows NT 用のバイ
ナリの利用法について述べたいと思います.
$ mount c:/cygnus/cygwin-b20/H-i586cygwin32/bin /bin
入手/導入
(実際は 1 行です)
作成するファイルは,/etc/passwd,/etc/groups
Cygwin の入手法
などですが,これは以下のようなコマンドで作成
Cygwin は先日 Red Hat, Inc.に買収された Cygnus
Solutions が主宰しているオープンソースプロジェ
クトで,Windows NT 上に UNIX 環境を実現するこ
とを目標として活動しています.Cygwin について
してくれます.
$ mkpasswd -l > /etc/passwd
$ mkgroups -l > /etc/groups
は http://sourceware.cygnus.com/cygwin/を
このようなことを単純に行ってくれるツールを
ご覧ください.Cygwin には CD-ROM のみで提供さ
Andy Piper 氏が http://www.xemacs.freeserve.
れている v1.00 や,本稿執筆時にはまだテスト中の
co.uk/で配布していますので,これを利用するこ
v1.1 もありますが,ここでは少し古いバージョン
ともできます.
最後に PostgreSQL が必要とする SysV IPC のイン
である Beta 20 を扱います.
Cygwin および必要なソフト
のインストール
まず,Cygwin の環境をインストール
します.Beta 20 のインストーラには開
●図 4
Cygwin 環境のディレクトリおよびファイルの構成図
C:¥
cygnus
cygwin-b20
発環境を含まない usertools.exe と開発
マウント
環境を含む full.exe がありますが,個人
の好みでどちらを使っていただいても
H-i586-cygwin32
/
bin
かまいません.これらのファイルは自
tmp
己解凍方式のインストーラとなってい
etc
るので,ファイルを実行してインスト
/bin
マウント
passwd
groups
ールしてください.ここでは C:¥cygnus
Jun.
2000 - 69
ストールを行います.これも筆者が提供するバイ
最後に,環境変数の設定をしましょう.環境変
ナリがありますので,それをそのまま解凍して bin
数 $PGDATA と $PGLIB を指定してください.
以下を/bin に入れてしまえば問題ありません.
$ bzip2 -d cygwin32_ipc-1.03-bin-patched.tar.bz2
$ tar -xf cygwin32_ipc-1.03-bin-patched.tar
$ cp bin/* /bin
Windows では *.dll の検索先は PATH なので,
pgsql/bin や pgsql/lib にあたるディレクトリもパス
を通してください.また,$USER や $HOME は必
須ではないのですが,Cygwin としてはあると便利
です.
インストールした ipc-daemon.exe は PostgreSQL
を実行するのに必要ですので,Postmaster を実行
する前には必ず実行しておいてください.
$ ipc-daemon &
このとき“ipc-daemon is now running...”という
ダイアログが出てくればインストールは成功して
います.
図 6 のように[コントロールパネル]─[シス
テム]─[環境]で以下のように設定します.
USER
:ユーザ名
HOME
:ホームディレクトリ(ex. /home)
PGDATA :データディレクトリ(ex. /usr/local/
pgsql/data)
PGLIB
:/usr/local/pgsql/lib
PATH
:既存のパス+"c:¥usr¥local¥pgsql¥bin;
PostgreSQL のインストールおよび設定
さて,ここまできてようやく PostgreSQL のイン
ストールに移ることができます.ディレクトリを
c:¥usr¥local¥pgsql¥lib"
他のパッケージに比べるとややこしいですが,
以上で最低限のインストールは終わりました.
用意して tarball を解凍し,ファイルを一括コピー
インストールが完了したら initdb を実行して,デ
して終わります.ここでは/usr/local/pgsql にイン
ータベースを立ち上げ,正常に動作することを確
ストールします(図5)
.
認しましょう (図7,図8)
.
●図 5
7.0(本稿執筆時は Beta)の場合もほぼ同様にイン
以上で完了です. 以上は 6.5.3 についてですが,
$
$
$
$
$
インストール手順
mkdir /usr
mkdir /usr/local
bzip2 -d postgresql-cygwinb20.1-6.5.3-EUC_JP.tar.bz2
tar -xf postgresql-cygwinb20.1-6.5.3-EUC_JP.tar
cp -r pgsql /usr/local/
ストールできます.
●図 7 initdb の実行
●図 6
環境変数の設定
$ ipc-daemon &
...
$ initdb
...
$ postmaster -i
...
●図 8 PostgreSQL の動作確認画面
$ psql -h 127.0.0.1 template1
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of
POSTGRESQL
[PostgreSQL 6.5.3 on i686-pc-cygwin, compiled by gcc 2.95]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1
template1=>
70 - Software Design
c h a p t e r
●図 10
6
ユーザ変更画面
特徴
Cygwin 版の欠点
WindowsNT/Cygwin上で動く PostgreSQL は,ほ
かの UNIX 版とは違う問題点がいくつかあります.
代表的なものとしては,
¡UNIX Domain のソケットが使えない 注 21 ため,
postmaster は必ず-i オプションを利用する必要が
あります.したがって psql などでは-h オプショ
ンを使ってすべてのアクセスにホスト名を指定
しなければなりません.
¡TIMEZONE の名前がきちんと表示できないバグ
が残っています.
¡postmaster の-S オプション(デーモン動作)が
正しく動作しません.
¡表題でも Windows NT と銘打っているとおり,
Windows 95 系では動作しません.
PostgreSQL を NT のサービスとし
て登録する
サービスを開き,図 10 のようにユーザを cygwin の
セットアップをしてあるユーザに変更してくださ
い.そのままでは,せっかく設定した mount table
がすべて失われてしまいますので注意してくださ
い.
以上でサービス登録作業は終わりです.ただし
安定性に欠けるので,動作がおかしいなと思った
ら,タスクマネージャからプロセスを殺して再起
動するなどしてみてください.
おわりに
しかしながら,一方ではうまく NT の機能に便乗
することもできます.ここでは Cygwin 上とはいえ,
せっかく Windows に PostgreSQL をインストールし
cygwin 版の PostgreSQL は本家に取り込まれてか
たわけですから,サービスとして postmaster を動
ら日も浅く,また初期段階ではひんぱんにハング
作させてみましょう.
アップする代物でしたが,現状ではようやくそれ
ここではサービスとして登録するために invoker
なりに動くようになりました.多くはないですが
を利用します. invoker は http://innovation.
業務用のアプリケーションの開発に利用している
idetix.com/invoker/から入手できます.
ような人もいらっしゃると聞きます.手軽にデス
ここで,ipc-daemon と postmaster の両方をサー
ビスとして登録してください(図9)
.
クトップの NT マシンで利用できるのは大きな魅力
です.
postmaster は symbolic link なので cygwin アプリ
ケーションからしか起動できません.次に両方の
●図 9 ipc-daemon と postmaster の登録
C:\>invoker install cygipc cygipc "ipc-daemon.exe -q" manual true
C:\>invoker install pgsql pgsql "sh -c 'postmaster -i'" manual true
注 21)最新の Cygwin はサポートしていますが,PostgreSQL はこれを利用できるようにはなっていません.
Jun.
2000 - 71