|
必聴講座ご紹介 Cloud Days Tokyo 2012 エムオーテックス Cloud Days Tokyo 2012 ヴイエムウェア Cloud Days Osaka 2012 アマゾン データ サービス ジャパン |
|
|
| 図1●psqlfsとPostgreSQLとの関係 |
psqlfsでは,記憶デバイスとしてPostgreSQLを使用する。psqlfsとしてマウントされたディレクトリ以下へのアクセスは,すべてPostgreSQLへのアクセスに変換される。PostgreSQLへのアクセスは,PostgreSQLのC言語クライアントライブラリであるlibpqを通じて行われる(図1[拡大表示])。
このように書くと,psqlfsを使えばSQLを使わずにPostgreSQLのテーブルにアクセスできるようになるのではないかと期待されるむきもあるかも知れないが,それは間違いである。psqlfsでは,ファイル・システムのディスク・イメージをBYTEAを使って特定のテーブルに格納する。つまり,任意のテーブルをpsqlfsを通じてアクセスするということはできない。
ただ,psqlfsでは個々のディレクトリやファイルはそれぞれテーブル内の各行に対応しているため,やり方によってはすべてのファイルの中身を横断的にSELECT文で検索することも可能だ(その方法については後で説明する)。
前述のように,psqlfsはLUFSを利用して実装されているので,まずはLUFSを導入する必要がある。インストールにはroot権限が必要だ。以下,すべての操作はrootで行う。なお,検証はVine Linux 2.6r4上で行った(kernel 2.4.22)。
本稿執筆時点のpsqlfsの最新版はバージョン0.01で,LUFS 0.9.7で開発されている。http://lufs.sourceforge.net/lufsよりlufs-0.9.7.tar.gzを入手しておく(ここでは/tmpに置くものとする)。そして適当な場所,ここでは ~/srcに展開するものとする。
# cd ~/src
# tar xfz /tmp/lufs-0.9.7.tar.gz
次にpsqlfsをhttp://www.edlsystems.com/psqlfsから入手し,/tmpなどに置いておいたものを展開する。
# tar xfz /tmp/psqlfs-01.1.tar.gz
展開してできたfilesystems/psqlfsをlufs/filesystemsに移動する。
# mv filesystems/psqlfs lufs-0.9.7/filesystems
次にlufs-0.9.7/configure.inの次の部分:
AC_ARG_ENABLE(cardfs,
[ --enable-cardfs build cardfs support (default=no)],
[ WITH_CARDFS=true ],)
のすぐ後に
AC_ARG_ENABLE(psqlfs,
[ --enable-psqlfs build psqlfs support (default=no)],
[ opt_fs="$opt_fs psqlfs"],)
を挿入する。
最後の方に
filesystems/wavfs/Makefile \
という行があるので,この直後に
filesystems/psqlfs/Makefile \
を追加する。
今回使用したPostgreSQLは,現時点で最新安定版の7.4.5で,標準の場所,すなわち/usr/local/pgsqlにインストールされている。これに合わせて,lufs-0.9.7/filessystems/psqlfs/Makefile.inを修正する。
CFLAGS := -O2 -Wall -lpq
という行があるので,これを
CFLAGS := -O2 -Wall -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq
に変更する。
次に/etc/ld.so.confを変更する。
/usr/local/lib
/usr/local/pgsql/lib
を追加し,ldconfigコマンドを実行するか,システムを再起動する。
実は,psqlfsのバージョン0.01にはrmdirできないバグがある。修正しよう。