http://qs321.pair.com?node_id=11127500


in reply to Re: Posgres batch read with DBI?
in thread Posgres batch read with DBI?

Many thanks for the pointer. Running this (SqlSupport is a homebrew helper module):
use lib qw ( c:/perlmodules ); use SqlSupport; my $dbh = connectpgdb(*,*,*,*,*); my $query = "select id,post from blog where language = 'en'"; my $sth = $dbh->prepare($query); $sth->execute || die "Could not execute MySQL statement: $sqlstatement +"; my $rows = []; # cache for batches of rows while( my $row = ( shift(@$rows) || shift(@{$rows=$sth->fetchall_array +ref(undef,10_000) || []}))) { my $foo = 1; } $sth->finish();
It's saying the last bracket is unmatched. But my IDE shows every bracket has a mate, and I clipped the whole while loop from the DBI docs.

Replies are listed 'Best First'.
Re^3: Posgres batch read with DBI?
by choroba (Cardinal) on Jan 26, 2021 at 23:32 UTC
    This works for me:
    #!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use DBI; my ($dbname, $user, $password) = @ARGV; my $db = 'DBI'->connect('dbi:Pg:dbname=' . $dbname, $user, $password, {AutoCommit => 0}); $db->do('CREATE TABLE t (id INT, name TEXT)'); my $populate = $db->prepare('INSERT INTO t (id, name) VALUES (?,?)'); my $max = 250_000; for my $i (0 .. $max) { $populate->execute($i, join "", map chr, map 64 + int rand 26, 1 . +. 10); print "$i\r"; } my $from = 0; my $fetch = $db->prepare('SELECT * FROM t LIMIT ? OFFSET ?'); while ($from <= $max) { $fetch->execute(1000, $from); while (my @row = $fetch->fetchrow_array) { say join "\t", @row; } say '---'; $from += 1000; } $db->disconnect;
    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
      Works for me too. Thanks for the code. I still don't get the unmatched bracket error...
        my $dbh = connectpgdb(*,*,*,*,*);
        ... unmatched bracket error...

        Just a total WAG, but if the quoted code was or was something like the actual code and not pseudo-code, remember that $, $) are Perl special (package-global) variables (see perlvar), so there are *, *) typeglobs of which they are subtypes (if that's the correct terminology).

        Win8 Strawberry 5.8.9.5 (32) Tue 01/26/2021 21:06:54 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my $dbh = # connectpgdb(*,*,*,*,*) # syntax error # connectpgdb(*,*,*,*,*)) # syntax error # connectpgdb(*,*,) # syntax error # connectpgdb(*) # syntax error # connectpgdb(*,) # compiles and runs connectpgdb(*)) # compiles and runs ; while ($dbh) { print "foo \n"; $dbh = ''; } sub connectpgdb { return $_[0]; } ^Z foo
        I can't duplicate the "unmatched bracket" error message you mention, but running under Perl version 5.30.3 vice 5.8.9 yields more error messages for my example code that are associated with the failed definition (hence absence) of $dbh, so maybe the "unmatched bracket" error is at the end of a long string | cascade of messages that begins with | stems from a syntax error.
        (In the unlikely event you're running the actual code you posted. :)


        Give a man a fish:  <%-{-{-{-<