[Chicago-talk] Re: postgres and COPY statements
Jim Thomason
jthomasoniii at yahoo.com
Thu Dec 11 17:04:16 CST 2003
What an ever-lovin' pain in the ass. But I finally
tracked it down and figured it out.
After a lot of searching, tons of testing,
iterations,ideas, dead-ends, etc., I managed to track
down a page off of google groups in Japanese (I think,
I'm not exactly up on my asian languages).
Fortunately, perl is perl, and it was still readable.
It also referenced a little function I'd never seen
before that proved to be the solution.
$dbh->func('endcopy');
So the full thing for me becomes:
$copy_into_student_answers->execute();
foreach (@insert) {
my $ret = $dbh->func($_, 'putline');
print "INSERT ($ret) $_";
};
my $r = $dbh->func("\\.\n", 'putline');
$dbh->func('endcopy');
And it runs like a dream. At this point, it didn't
shave a lot of runtime off of my test file (since I'm
caching other values like mad), but it still brought
the time down from 1m30s to 1m10s and it should have a
bigger effect on files that require more database
reads.
that 'endcopy' does exist in DBD::Pg (in Pg.xs,
large_obhect.h and large_object.c) but is utterly
undocumented anywhere in DBD::Pg. Doesn't appear to be
part of DBI, either, so it's not there.
What a pain in the ass. An utterly vital component,
and no reference to it whatsoever. It's incidents like
this that turn people off to open source.
Document your code!
-Jim.....
__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/
More information about the Chicago-talk
mailing list