[pgsql-jp: 25684] Re: ラージオブジェクトの削除後の領域開放

kumiko naito naito @ mdsnet.co.jp
2002年 4月 24日 (水) 11:20:32 JST


Kumakiriさん、杉田さん、回答有難うございます。

> ;;; >blob型でデータを挿入した領域はvacuumコマンドでも開放されないのでしょ
> うか?
> ;;;
> ;;; はい。明示的に開放する必要があります。
>
>   当然これはされていて、Windows2000 では、領域開放されないと言われているの
> だと
> していました。
>
PostgreSQLは扱うのは初めてで(Oracleの経験はあります)よく判らなかったので
確認させて下さい。
現在、私が行っている検証方法では、lob型を含んだテーブルに対してdelteし、
その後、vacuumをかけているだけです。これでは不十分だったのですね。

> ;;; どのようにlob型にアクセスされているかわかりませんが、私の場合は
> RedHat Linuxで、
> ;;; JDBC経由でアクセスしていますが、以下のようにしています。
> ;;;
> ;;; create table image (name text,raster oid) の場合、
> ;;;
> ;;; LargeObjectManager lom =
> ((org.postgresql.Connection)connM).getLargeObjectAPI();
> ;;;
> ;;; int raster = rs.getInt("raster");
> ;;; lom.delete(raster);
> ;;;
> ;;; 次にテーブルのoidを含んだレコードを消します。
>
>   場合によりますが、自前のテーブルで BLOB の OID を保存しているときに、レ
コ
>> ド削除時にトリガーで BLOB を削除するように定義しておく手もあります。

「次にテーブルのoidを含んだレコードを消」すというやり方のイメージがつかめま
せん。
create table image (name text,raster oid) の場合、このテーブルに格納されてい
るのは
oidだけで、実際のラージオブジェクトは別の場所にあるわけですよね。
この実際のオブジェクトを何らかの方法で削除しなければならないという事でしょう
か?
イメージ的にはOracleの BLOB型(DB内でラージオブジェクトを保持・管理する)
では無く、
BFILE型(管理情報のみをDBに格納し、実際のデータは外部に持つ)に近いと
考えたほうが良いのでしょうか?
現在は検証のため、ローカルDBにpsqlでアクセスしていますが、実際のシステムで
は
JDBC経由になります。(本番サーバはSolarisになると思います。)

すみませんが、明示的な開放のしかたを、もう一度、ご教授いただけますでしょうか
?
以上、宜しくお願いたします。
**********************
送信者
内藤 久美子
naito @ mdsnet.co.jp
**********************




pgsql-jp メーリングリストの案内