----- Original Message -----
From: "Rob" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, August 27, 2002 4:00 PM
Subject: Slow Postgres Update


> The below updates a database from a very large file but it's rather slow;
> How can I speed it up some?  I'm still new to database programming with
> Perl so if you see anything else that I'm doing wrong or could do better
> don't hesitate to point it out.
>
> #!/usr/bin/perl -w
>
> use strict;
> use DBI;
>
> my($sql, @row, $message, $pin, $pageCnt) = "";
>
> my $database = "dbi:Pg:dbname=paging";
> my $db_user = "rob";
>
> my $dbh = DBI->connect($database, $db_user, "",
>      {AutoCommit => 1},
>      ) or die "Can't connect to database\n" . DBI->errstr;
>
> $sql = $dbh->prepare_cached('UPDATE data SET TotalPages = (TotalPages + ?)
>             WHERE PIN = ?');
>
>
> #process file and update db
> open(IN, "CNTR2000.ASC") || die "Can't open input file: $!\n";
> open(ERR, ">zetron.err") || die "Can't create err file: $!\n";
> while(<IN>) {
>     chomp;
>     $pin = substr($_, 1, 7);
>     $pageCnt = substr($_, 139, 5);
>     if($pageCnt > 0) {
>         $sql->execute($pageCnt, $pin)
>                 or print ERR "$pin\t$pageCnt\t$sql->errstr";
>         $message = $sql->errstr;
>         unless ($message) {
>             $message = "Record Updated!";
>         }
>         print "$pin\t$pageCnt\t$message\n";
>     }
> }
> $sql->finish;
> $dbh->disconnect;
> close(IN);
> close(ERR);
>
> print "\n\nAll Done!\n\n";

1. Set AutoCommit to 0 and commit in batches (say 100 rows).
2. Make sure there's an index on PIN.



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to