[PHP-users 4634] Re: ラージオブジェクト登録

Yasuo Ohgaki php-users@php.gr.jp
Wed, 09 Jan 2002 18:42:59 +0900


AKUNE Yutaka wrote:

> 阿久根です。今年もよろしくお願いします。
> 
> 
> On Tue, 08 Jan 2002 16:32:53 +0900
> GUU <guu_ml@reguler-c.com> wrote:
> 
> 
>>-----------------------------------------------------
>>	pg_exec ($con, "begin");
>>	$result=pg_exec($con,$sql);
>>
>>	if($ary[kiji_gazou]!="none"){
>>		$fn=fncCopyFile($ary[kiji_gazou]);
>>		pg_loimport($fn);
>>
>>	}
>>	
>>	pg_exec ($con, "commit");
>>-----------------------------------------------------
>>$sqlは、既に単独でインサート成功しているSQL文が入っています
>>
> ---[ 略 ]---
> 
>>このコード実行に関してはエラーは発生しなかったのですが、ODBC接続でACCESS
>>からカラムを見ても、何も入っていませんでした。psqlでも同様でした。
>>データが登録されたことを確認する手段が、間違っているのでしょうか?
>>そもそもフィールドをどうやって指定するのでしょうか?(まったくやり方が違っ
>>ている気もしますが・・・^^;;)
>>
> 
> この $sql が何をしているのか、みているのはどのカラムかも分かりませんが・
> ・・
> 
> ラージオブジェクトを格納しても、その格納したオブジェクトの ID を取得して
> おかないと意味がありません。pg_loimport() の戻り値がその ID になります。
> ラージオブジェクトが実際に格納されるのは、システムカタログの 
> pg_largeobject テーブルです。このテーブルの loid フィールドの値がオブジェ
> クトのIDとなります。ちゃんとデータが登録されたかどうかは、この loid とイ
> ンポート時の戻り値のIDを照合することで可能です。
> 
> ただ、この pg_largeobject にはファイル名を保存しておけないので、私の場合
> は別個にラージオブジェクトの管理テーブルのようなものを作っておき、そこに 
> pg_loimport() の戻り値(オブジェクトID)と対にしてファイル名を登録してます。
> 
> ※PHP-4.0.6でラージオブジェクトを触っているとよく落ちるようです。

Large objectを利用する場合には必ずtransactionが必要なため、よくPostgreSQL
のバックエンドからNOTICEメッセージがPHPに送られます。4.0.6にはバグがあるので
クラッシュします :)

-- 
Yasuo Ohgaki
yohgaki@dd.iij4u.or.jp

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/