이상하군요. 일단 현재의 large object 를 쓰는데에는 크게 문제가 없어 보입니다.
table 구조를
CREATE TABLE obj_table ( rowid int,loid oid, loname text);
이렇게 정의해 두었다면 다음과 같이 insert 가 되겠지요.
insert into obj_table values ($rowid, $obj,'$msg_name');
이런식으로 들어가게 되겠지요.
아래의 자료가 제대로 들어갔는지 테스트를 해 보시려면 postgres 라는 DBA 로 접속하신 다음 select lo_export(oid,'/tmp/'||loname) from obj_table where rowid=1; 이런식으로 해서 확인을 해 보시기 바랍니다. 그러면 어느 정도 어디서 에러가 났는지 확인을 할 수 있을 것입니다. 아래의 함수 자체는 전혀 문제가 없어 보입니다.
그리고 large object 입력시 에러가 발생하면 postmaster backend 데몬 자체가 죽는 경우가 가끔 발생하는 데 이것을 막을 방도가 없습니다. (일종의 버그라고 생각합니다) 일단 PostgreSQL 의 버전을 7.0.2로 upgrade 시키시기 바랍니다. 상당 부분 버그가 수정되었습니다.
::오행언 님께서 쓰시길::
> function putDataToLobj($db, $msg){
>
> $conn = pg_Connect("dbname=$db user=$id password=$pw");
>
> pg_Exec($conn,"begin");
>
> $obj = pg_locreate($conn);
> $fp = pg_loopen($conn,$obj,"w");
> pg_lowrite($fp,$msg);
> pg_loclose($fp);
>
> pg_Exec($conn,"commit");
> pg_Exec($conn,"end");
>
> pg_Close($conn);
>
> return $obj;
> }
>
> 저는 PHP와 Postgresql(6.4)를 가지고 게시판을 만들고 있습니다.
> 그런데 필드 하나의 데이타가 8k가 넘어서기 때문에 Large Object
> 를 사용해야 합니다.
> 그런데 위의 함수 pg_loclose($fp) 에서 다음과 같은 에러가 발생합니다.
> 이유를 알려 주시면 감사하겠습니다.
>
> Warning: Unable to close PostgresSQL large object descriptor 0 in /export/home/ubf/htdocs/pgdb/l
> object.inc on line 14
>
> 실제로 Database의 /data/base/$db디렉토리에 보니 Large object를 위한
> 2개의 index 파일은 생성되어 있습니다. 그런데 파일 내용은 저장되지 않았더군요
>
> 그리고 Large object 처리시 에러가 발생하면 backend에서 에러가 발생하던데
> 어떻게 처리해야 하는지도 가르쳐 주시면 감사하겠습니다.
|