Re: reading reading files from the DB

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: sandhya <sandhyar(at)amiindia(dot)co(dot)in>
Cc: postgre <pgsql-admin(at)postgresql(dot)org>
Subject: Re: reading reading files from the DB
Date: 2005-12-29 04:47:34
Message-ID: 20051229044734.GA45641@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

On Wed, Dec 28, 2005 at 04:40:02PM +0530, sandhya wrote:
> I have exported few files into my DB server running on LINUX os.
> I connected to it remotely from windows and through one sample application
> like webserver i am trying to read the contents of it when ever there is a
> request for the specified file.Using the below example code.
> Is this correct?I am not finding that it is reading it from the database.
> How can i make sure of this.I am unable to open the requested file from win
> application through database.

What are you expecting to happen and what actually does happen?

> lobj_fd = lo_open(conn, lobjId, INV_READ);
> if (lobj_fd < 0)
> {
> MessageBox(0,"error","Cannot Object Id ",MB_OK);
> }

Does MessageBox() return control to the program? If so then you
should return or exit in case of error because there's no point
continuing if lo_open() failed, and calling other lo_* functions
will almost certainly cause problems. Also, you can use PQerrorMessage()
to get an error message explaining the failure.

> lo_lseek(conn, lobj_fd, start, SEEK_END);
> len = lo_tell(conn,lobj_fd);
> lo_lseek(conn, lobj_fd, start, SEEK_SET);
> buf =(char*) malloc(len + 1);

A robust program would check these calls for errors.

> nread = 0;
> while (len - nread > 0)
> {
> nbytes = lo_read(conn, lobj_fd, buf, len - nread);
> buf[nbytes] = ' ';
> nread += nbytes;
> }

I'm not sure the loop is necessary, but if you keep the loop then
you're not handling buf correctly. As written, each call to lo_read()
will store data at buf, overwriting what was written there before.
And why are you appending a space? Did you mean to append a NUL
('\0') string-terminating character? That would make sense only
if you know the large object data can be handled as a string, i.e.,
that it doesn't contain binary data where NUL might be present in
the middle of the data. And again, a robust program would check
lo_read()'s return value before continuing.

--
Michael Fuhr

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message sandhya 2005-12-29 05:14:23 Fw: reading reading files from the DB ...pls
Previous Message Bruno Wolff III 2005-12-28 20:26:07 Re: preventing deadlocks