2009-02-21
■[PostgreSQL]ラージオブジェクトを使ってみた サーバサイド編
ため込んだH動画&H画像を奥様に見つからないようにげ、げふん。
DBでバイナリデータの扱う練習をかねて、PostgreSQL のラージオブジェクトで遊んでみた。
Bytea型もあるけど、psql からデータ出し入れする方法が思い当たらないのでとりあえず。
ちなみにラージオブジェクトとBytea型の比較は以下のサイトで詳しく紹介されてました。
http://mikilab.doshisha.ac.jp/dia/research/report/2003/0606/001/report20030606001.html
ラージオブジェクトID格納テーブルを作成
バイナリデータはテーブルに格納される訳ではなく、別な領域に格納されるらしい。
ここではバイナリデータがどのラージオブジェクトIDに紐づいているかを知る為のテーブルを作成する。
CREATE TABLE image ( name text UNIQUE, object_id oid );
バイナリデータを登録する
lo_import() を利用する。ファイルの指定は postgres 権限でアクセスできるディレクトリ配下に無いとダメ。
postgres=# INSERT INTO image (name, object_id) VALUES ('test image', lo_import('/tmp/vipper.jpg')); INSERT 0 1 postgres=# select * from image; name | object_id ------------+----------- test image | 16427 (1 row)
バイナリデータを取得する
lo_export() を利用する。
引き出すラージオブジェクトIDとファイルパス/ファイル名を引数とする。
出力先は postgres 権限でアクセスできるディレクトリ配下に無いとダメ。
postgres=# SELECT lo_export(image.object_id, '/tmp/vipper_export.jpg') FROM image WHERE name = 'test image'; lo_export ----------- 1 (1 row)
格納したバイナリファイルを削除する
lo_unlink() を利用する。
ラージオブジェクトを削除しても、ID格納テーブルには情報が残ってしまうので合わせて削除する。
postgres=# SELECT lo_unlink(object_id) FROM image WHERE name = 'test image'; lo_unlink ----------- 1 (1 row) postgres=# DELETE FROM image WHERE name = 'test image';
コレは一本化する必要が…
雑感
たしかにバイナリファイルを扱えましたが…
Mac & Windows & Linux でごちゃごちゃやるのに、入出力用のクライアントが無いと使ってられない機能。
ファイルの管理はファイルシステムに任せるべきですね。
トラックバック - http://d.hatena.ne.jp/yamazaru_rengou/20090221/1235230805
リンク元
- 2 http://blog-search.yahoo.co.jp/search?p=H画像&ei=UTF-8
- 2 http://ezsch.ezweb.ne.jp/search/?sr=0101&query=DHCPサーバ
- 2 http://search.yahoo.co.jp/search?p=os+x+ネットワーク+ブート&ei=UTF-8&pstart=1&fr=top_ga1_sa&b=11&qrw=0
- 2 http://www.google.co.jp/reader/view/
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=nJj&q=レビューア+レビューイ&revid=446469201&ei=n7KgSb3ACZDy6QO67_TJCg&sa=X&oi=revisions_i
- 2 http://www.google.com/custom?hl=ja&client=pub-2070091971271392&channel=0262445351&cof=FORID:1;AH:left;CX:Start%20Search;L:http://www.google.com/coop/intl/ja-US/images/custom_search_sm.gif;LH:65;LP:1;VLC:#551a8
- 1 http://blog-search.yahoo.co.jp/search?fr=top_ga1_sa&ei=UTF-8&p=ヤマダ 1000ポイント
- 1 http://blog.search.goo.ne.jp/search_goo/result/?MT=キティ&rm=1&dc=10&st=time&ts=all&da=all&tg=all&fs=all&pg=100
- 1 http://d.hatena.ne.jp/johzan/20090222/1235292197
- 1 http://ezsch.ezweb.ne.jp/search/?sr=0101&query=お腹 激痛 苦しい