perl use of cursors and fetch forward
Can someone tell me how to use Postgres cursors through perl? A sample is
below. Is there some way to keep the transaction active between
$conn-exec calls?
#!/usr/local/bin/perl
use Pg;
my $conn = Pg::connectdb("dbname = test");
my $result = $conn->exec("begin work; declare c1 cursor for select fld1
from tbl1 ; ");
$result = $conn->exec("fetch forward 1 in c1;");
print "Hurray, I fetched a row: " . $result->fetchrow . "\n";
$result = $conn->exec("end work;");
jrf@roog:~/$ perl test_cursor.pl
NOTICE: PerformPortalFetch: portal "c1" not found
Hurray, I fetched a row:
NOTICE: COMMIT: no transaction in progress
jrf@roog:~/$
dooh. never mind.
this works if the "begin work;" and "declare ...;" are in separate exec
requests.
On Mon, 29 Jan 2001, John Frank wrote:
Show quoted text
Can someone tell me how to use Postgres cursors through perl? A sample is
below. Is there some way to keep the transaction active between
$conn-exec calls?#!/usr/local/bin/perl
use Pg;
my $conn = Pg::connectdb("dbname = test");my $result = $conn->exec("begin work; declare c1 cursor for select fld1
from tbl1 ; ");$result = $conn->exec("fetch forward 1 in c1;");
print "Hurray, I fetched a row: " . $result->fetchrow . "\n";$result = $conn->exec("end work;");
jrf@roog:~/$ perl test_cursor.pl
NOTICE: PerformPortalFetch: portal "c1" not found
Hurray, I fetched a row:
NOTICE: COMMIT: no transaction in progress
jrf@roog:~/$
John Frank <jrf@segovia.mit.edu> writes:
this works if the "begin work;" and "declare ...;" are in separate exec
requests.
This is fixed for 7.1. The problem in 7.0 is that the check for "are we
inside a transaction block?" is done at the wrong time, ie, during
initial parsing of the query string ...
regards, tom lane