pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
Problem with Large Object Interface of pgsql_perl5
3+ messages / 2 participants
[nested] [flat]

* Problem with Large Object Interface of pgsql_perl5
@ 2000-03-31 16:18  Ken Causey <ken@premiernet.net>
  0 siblings, 2 replies; 3+ messages in thread

From: Ken Causey @ 2000-03-31 16:18 UTC (permalink / raw)
  To: pgsql-interfaces

I'm using PostgreSQL 6.5.3, Perl 5.005_03, and pgsql_perl5 1.8.0 on
Linux (intel).

Running this program:

#!/usr/bin/perl
use strict;
package Main;

use Pg;

my $db_name='excised';
my $db_user='excised';
my $db_passwd='excised';

# Connect to the database server
my $dbconn = Pg::connectdb("dbname=$db_name user=$db_user
password=$db_passwd");
if($dbconn->status ne PGRES_CONNECTION_OK){
# We failed to get a connection, exit with error
   my $error=$dbconn->errorMessage;
   print "Error on connection: $error\n";
   exit;
}

print "Database connection opened\n";

my $newoid = $dbconn->lo_creat(PGRES_INV_WRITE|PGRES_INV_READ);

if($newoid == PGRES_InvalidOid){
   my $error = $dbconn->errorMessage;
   print "Error on lo_creat: $error\n";
   exit;
}

print "LO created\n";

my $fd = $dbconn->lo_open($newoid,PGRES_INV_WRITE);

if($fd == -1){
# Error on opening new oid
   my $error = $dbconn->errorMessage;
   print "Error on lo_open (oid = $newoid): $error\n";
   # Try to unlink the oid
   $dbconn->lo_unlink($newoid);
   exit;
}

print "LO opened\n";

my $content = 'This is a test of the emergency broadcasting system, in the
event of a real emergency...';

my $numbytes=$dbconn->lo_write($fd,$content,length($content));

if($numbytes != length($content)){
   my $rightnum=length($content);
   my $error = $dbconn->errorMessage;
   print "Error on lo_write ($numbytes != $rightnum): $error\n";
   # Try to unlink the oid
   $dbconn->lo_close($fd);
   $dbconn->lo_unlink($newoid);
   exit;
}

print "LO written\n";

$dbconn->lo_close($fd);

$dbconn->lo_unlink($newoid);


I get this output:

Database connection opened
LO created
Error on lo_open (oid = 46401): ERROR:  lo_lseek: invalid large obj
descriptor (0)

Can anyone tell me what I'm doing wrong?

All help is greatly appreciated.

Ken Causey
PremierNET, Inc.



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: Problem with Large Object Interface of pgsql_perl5
@ 2000-03-31 18:11  Tom Lane <tgl@sss.pgh.pa.us>
  parent: Ken Causey <ken@premiernet.net>
  1 sibling, 0 replies; 3+ messages in thread

From: Tom Lane @ 2000-03-31 18:11 UTC (permalink / raw)
  To: Ken Causey <ken@premiernet.net>; +Cc: pgsql-interfaces

Ken Causey <ken@premiernet.net> writes:
> Can anyone tell me what I'm doing wrong?

Not doing the lo_open inside a transaction.  You need begin ... end
around any use of an open large object.  (This has always been true,
but older versions of Postgres didn't enforce it --- they'd just die
occasionally if you broke the rule.  Now, open LO handles are auto-
closed at transaction commit, which is to say at end of statement
if you're not inside a BEGIN block.)

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: [INTERFACES] Problem with Large Object Interface of pgsql_perl5
@ 2000-03-31 19:39  Ken Causey <ken@premiernet.net>
  parent: Ken Causey <ken@premiernet.net>
  1 sibling, 0 replies; 3+ messages in thread

From: Ken Causey @ 2000-03-31 19:39 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: pgsql-interfaces; pgsql-general@postgresql.org

Edmund Mergl was kind enough to point out my error and now
that I look back at the Programmer's documentation I see it.  Someone
might want to update the Pg man page to reflect this.  Thanks!

Ken Causey
PremierNET, Inc.

At 01:11 PM 3/31/00 -0500, Tom Lane wrote:
>Ken Causey <ken@premiernet.net> writes:
>> Can anyone tell me what I'm doing wrong?
>
>Not doing the lo_open inside a transaction.  You need begin ... end
>around any use of an open large object.  (This has always been true,
>but older versions of Postgres didn't enforce it --- they'd just die
>occasionally if you broke the rule.  Now, open LO handles are auto-
>closed at transaction commit, which is to say at end of statement
>if you're not inside a BEGIN block.)
>
>			regards, tom lane
>
>



^ permalink  raw  reply  [nested|flat] 3+ messages in thread


end of thread, other threads:[~2000-03-31 19:39 UTC | newest]

Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2000-03-31 16:18 Problem with Large Object Interface of pgsql_perl5 Ken Causey <ken@premiernet.net>
2000-03-31 18:11 ` Tom Lane <tgl@sss.pgh.pa.us>
2000-03-31 19:39 ` Ken Causey <ken@premiernet.net>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox