Thread: pg_loopen() error

pg_loopen() error

From
Louis Bertrand
Date:
Hello all,

I'm trying to pull a LO out of a database (7.0.2) on OpenBSD 2.7 with
PHP 3.0.18 + Apache 1.3.12, except I keep getting this error:

Connection="6"
ObjectID="19766"
Warning: Unable to open PostgresSQL large object in
/var/www/htdocs/secure/whdb-test/download.php3 on line 81

Handle=""
PostgreSQL error="ERROR: lo_lseek: invalid large obj descriptor (0) "

The code fragment is:
  echo "<br>Connection=\"$conn\"";
  echo "<br>ObjectID=\"$objectid\"";
  $handle = pg_loopen( $conn, $objectid, "r");
  echo "<br>Handle=\"$handle\"";
  echo "<br>PostgreSQL error=\"".pg_ErrorMessage($conn)."\"";

The LO is there, really!
I can use \lo_export to put it on local disk (diff checks it OK), and the
connection is valid because I pull the objectid out of another table where
objectid is declared as type OID.

Any clues? Known bug in pg_loopen? Pilot error?

Sign me stumped
 --Louis  <louis@bertrandtech.on.ca>

Louis Bertrand       http://www.bertrandtech.on.ca/
Bertrand Technical Services, Bowmanville, ON, Canada
Tel: +1.905.623.1500  Fax: +1.905.623.3852

OpenBSD: Secure by default.  http://www.openbsd.org/




Re: pg_loopen() error

From
Stephen van Egmond
Date:
Louis Bertrand (louis@bertrandtech.on.ca) wrote:
> Any clues? Known bug in pg_loopen? Pilot error?

I think large objects need to be read in a begin/end block.  The
annotated PHP covers this in the user comments...

Re: pg_loopen() error

From
Louis Bertrand
Date:
Stephen,

Thanks! That was it.

A quick check of the code for how psql does it also confirms that!
(src/bin/psql/large_obj.c)

Ciao
 --Louis  <louis@bertrandtech.on.ca>

Louis Bertrand       http://www.bertrandtech.on.ca/
Bertrand Technical Services, Bowmanville, ON, Canada
Tel: +1.905.623.1500  Fax: +1.905.623.3852

OpenBSD: Secure by default.  http://www.openbsd.org/

On Thu, 11 Jan 2001, Stephen van Egmond wrote:

> Louis Bertrand (louis@bertrandtech.on.ca) wrote:
> > Any clues? Known bug in pg_loopen? Pilot error?
>
> I think large objects need to be read in a begin/end block.  The
> annotated PHP covers this in the user comments...
>