そもそも、配列型のカラムなんてものを初めて知ったのですが、、、新しい業界標準「SQL99」詳細解説 - 第二章 柔軟さを増したデータ構造(1)PostgreSQL v8では、このSQL99に準拠して配列型というカラムが使えます。例えば、あるカラムが整数値の配列を持つ場合、
CREATE TABLE hoge
(
....
fuga INTEGER[],
....
)
みたいに書けるのです。この場合、普通にコマンドラインクライアント(PostgreSQLであればpsql)からこのカラムをSELECTすると、"{val1,val2,...}"という様に、整数値がカンマ区切りで繋がれ、中括弧でくくられた文字列値として見えます。
プログラムからデータを取得する場合は、例えばPerlのDBI/DBD::Pgの場合、このカラムを取得したデータ型は、Perlの無名リストへの参照として自動的に展開されます(注1)。
正直言って、SELECT文一発でカラムデータが検索出来なそうな感じがするので、あまり使いたい気はしないんだけれど、こういうデータ型が便利なシチュエーションもあるのかも知れないなあとも思う。
(注1) ちなみにこの挙動はDBD::Pgのバージョンが2.0以上でないと利用できないっぽい。バージョン1.4では、単なる"{val1,val2,...}"という文字列を取得してしまった。。。
PHP5のPostgreSQLバインドは、まだこの配列型に対応していないっぽいです。いちいち"{val1,val2,...}"をパースして配列に展開する作業が鬱陶しいです、正直なところ。
*****
その後、色々とテストしてみると、DBD::Pg v2.0以降であればINSERT/UPDATE/SELECTにおいて、配列型カラムの値はPerlのリストへの参照と等価であることが分かりました。両者の変換はドライバによってシームレスに行われます。
これはちょっと便利かも。
前の日記でCPANにDBD::mysqlをインストールしたが、その際にはビルドエラーが発生する場合がある。ちなみに、私の場合は発生した。解決方法に関しては、[[mac][perl]Mac OS XにDBD::mysqlをインストールする]を参考にさせて頂く。もしかすると、MacOS XでPerlとDBD::mysqlを使う場合特有の問題かも知れない。
ちなみに、"DBD::MySQL"の様にMySQLとキャピタリゼーションして表記するのは間違いの様だ。"DBD::mysql"と小文字で書くのが正しい。
私のMacBookは、主としてドキュメント作成と画像編集にしか使っておらず、以前は仕事でプログラムも書いたのだがそれでもPHPやJavaで事足りていた。しかし、最近になってDBアクセスも含めてPerlを使いこなす必要が生じた為、急遽環境を整備する必要に。
PerlのDBアクセスはDBIというフレームワークを使うのが一般的で、私のMacにも既にPerlとDBIはインストールされている。しかし、MySQLへ接続する為の個別のモジュール(DBD)が無い為、CPANを使ってDBD::MySQLを入れることにする。
私はPerl歴は結構長いのだがCPANはあまり使ったことが無かったので、[CPAN経由でLinuxにモジュールを組み込む]を参考にさせて頂き、CPANをチェックしてみる。
% perl -MCPAN -e shell
すると、手動でのCPAN設定が開始される。ここで気付いたのが、CPANに必要なlynxやwget等のツールが無いということ。通常のMacOS X向けのユニバーサルバイナリを探したのだが、ネット上にはtar-ballからのインストール情報が溢れていたので、気を取り直してMacPortsを使うことにする。
というか、MacBookを使い始めてもう1年半以上経つのに、未だにMacPortsを入れていないことがバレてしまった。。。UNIX使いとして失格である。
さて、MacPortsというパッケージシステム自体はユニバーサルバイナリで提供されている為、MacPortsのサイトからダウンロードする。
画面左側のメニューから[Installing MacPorts]をクリックし、画面右側のリンク[Leopard (Universal)]をダウンロードし、MacPortsをインストールする。但し、画面右側の下部に記載されている様に、MacOS X 10.5 LeopardではXcode 3.0がインストールされている必要がある。私のMacBookには既にインストールされているので問題ないが、未導入の場合はMacBook付属のCD-ROMからインストールする必要がある。
MacPortsが入ったら、後はターミナルで操作を行う。
MacPortsでインストールしたいパッケージ(hoge)を検索する際:
% port search hoge
MacPortsでパッケージ(hoge)のオプションを検索する際:
% port variants hoge
MacPortsでパッケージ(hoge)をインストールする際:
% sudo port install hoge
後は、MacPortsを使って必要なコマンドをインストールする。注意点としては、CPANが要求するコマンド名と、MacPortsのパッケージ名が必ずしも一致しない事だ。lynxコマンドやwgetコマンドはパッケージ名もlynx及びwgetだが、ncftpgetコマンドのパッケージ名はncftpであり、gpgコマンドのパッケージ名はgnupgだ。後は設定に関する質問に答えていけば、CPANの設定は完了する。
CPANの設定が完了するとCPANのコマンドラインプロンプトが表示されるので、やっと念願であったDBD::MySQLのインストールが出来る。インストールは以下のコマンドで実行する。
cpan> install Bundle::DBD::MySQL
ちなみに、このインストール作業中にCPAN自体のアップデート(?)も推奨されるので、以下のコマンドも実行する。
cpan> install Bundle::CPAN
cpan> reload cpan
以上で(やっとこさ) PerlスクリプトからMySQLに接続する準備が整った。さて、書くか。。。