While poking about in my favorite MUA
(Pronto; http://muhri.net/pronto)
I discovered what may be a serious bug in DBD::Pg. While attempting
to import some files (email) into the database, the script dumped
core.
Some experimenting shows that smaller files (>100k or so) insert
fine, but larger file inserts into text fields cause the script to
segfault and dump core when execute() is called on the statement
handle.
I have successfully inserted the same text into Postgres using the
COPY command, so that should rule out db issues.
The offending code:
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("dbi:Pg:dbname='jeff'", 'jeff', '', {AutoCommit => 0 });
open(FILE, 'test.msg');
undef $/;
my $msg = <FILE>;
close(FILE);
my $sth = $dbh->prepare("INSERT INTO message_sources VALUES(91, ?)");
$sth->bind_param(1, $msg);
$sth->execute();
$dbh->commit();
$dbh->disconnect;
The file test.msg is ~178k (it's a pgsql-general-digest message).
The table:
jeff=# \d message_sources Table "message_sources"Attribute | Type | Modifier
-----------+---------+----------id | integer | not nullbodytext | text |
Index: message_sources_pkey
The first few lines of 'strings core' suggests that there might be an
issue with DynaLoader:
tch %s%s%s%s %_
DynaLoader::dl_load_file
DynaLoader::dl_find_symbol
DynaLoader::dl_undef_symbols
DynaLoader::dl_install_xsub
DynaLoader::dl_error
"@ t
bh->disconnect;$msg);
ERT INTO message_sources VALUES(91, ?)");=> 0 });
The environment:
Red Hat 7.0 (linux 2.4.2)
Perl 5.6.0 (compiled from source, shared libperl.so)
PostgreSQL 7.1RC1 (compiled from source)
DBD::Pg 0.95 (compiled from source)
I recompiled Perl and DBD::Pg using kgcc (egcs-2.91.66) to make sure
that the RH gcc 2.96 wasn't at fault, and got the same results.
The corefile and test message are available.
-- Jeff DuffyGreat Bridge, Inc.jduffy@greatbridge.com