----- 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]