Thread: perl and large objects
I am new to large objects and have a simple test script that dies (at the lo_import line) and I don't know why (no descriptive error given). Any suggestions (or a quick tutorial)? The DBD manual just wasn't quite enough for me, I guess. Thanks, Sean #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect('dbi:Pg:dbname=test2', undef, undef, {AutoCommit=>1},) || die $@; $dbh->{AutoCommit}=0; my $lobjID = $dbh->func("./out.png",'lo_import') || die $DBI::errstr; print $lobjID . "\n"; my $sth=$dbh->prepare('insert into lo_store (obj) values (?)'); $sth->execute($lobjID); $dbh->commit(); $dbh->func($lobjID,"./lo.pl.copy",'lo_export') || die $@; $dbh->commit();
Sean Davis wrote: > I am new to large objects and have a simple test script that dies (at > the lo_import line) and I don't know why (no descriptive error given). > Any suggestions (or a quick tutorial)? The DBD manual just wasn't > quite enough for me, I guess. The lack of error message feels like what happens when you call lo_* functions outside of a transaction. IIRC you just get 0 as the resulting oid to a lo_import, for instance. You could try adding $dbh->do("select 1") just after $dbh->{AutoCommit}=0 to ensure that a transaction is started before the lo_import. Also, your code snippet runs fine for me, unmodified, with DBD::Pg 1.21 Are you running an older version? -- DanielPostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org
On May 18, 2005, at 7:07 PM, Daniel Verite wrote: > Sean Davis wrote: > >> I am new to large objects and have a simple test script that dies (at >> the lo_import line) and I don't know why (no descriptive error given). >> Any suggestions (or a quick tutorial)? The DBD manual just wasn't >> quite enough for me, I guess. > > The lack of error message feels like what happens when you call lo_* > functions outside of a transaction. IIRC you just get 0 as the > resulting > oid to a lo_import, for instance. > > You could try adding $dbh->do("select 1") just after > $dbh->{AutoCommit}=0 > to ensure that a transaction is started before the lo_import. > > Also, your code snippet runs fine for me, unmodified, with DBD::Pg 1.21 > Are you running an older version? > DBD::Pg-1.41 It was indeed that the transaction was not started. Putting in a couple of "select 1" worked just fine. Thanks for the help. Sean