Oy, just when I sent it, I realised what the problem is:
Please apply following patch to dbdimp.c
Edmund, please, apply this patch to DBD::Pg for next release.
1169c1169
< dest+=snprintf(dest, strlen(imp_sth->statement)
+ max_len + (statement - dest), "\\\\%03o", *val);
---
> dest+=snprintf(dest, strlen(imp_sth->statement)
+ max_len + (statement - dest), "\\\\%03o", *((unsigned char *)val));
On Wed, 27 Jun 2001, Alex Pilosov wrote:
> I'm one to blame for the bytea support, so :)
>
> Something is mangling chr(128) somewhere. If you do this one with
> DBI_TRACE=2, you'll see: >INSERT INTO test VALUES ('\\37777777600')<
>
> I'm looking what's causing it...
> ---cut---
> I'm getting core dumps when I try to use a BYTEA value with
> a byte outside 0..127.
>
> use DBI qw(SQL_BINARY);
> my $dbh = DBI->connect("dbi:Pg:dbname=merlyntest", "user", "pass",
> { RaiseError => 1 });
> $dbh->do("CREATE TABLE test (a BYTEA)");
> my $insert = $dbh->prepare("INSERT INTO test VALUES (?)");
> $insert->bind_param(1, undef, SQL_BINARY); # necessary for BYTEA
> escaping
> $insert->execute("fred"); # works fine
> $insert->execute(pack "C*", 0..127); # works fine
> $insert->execute(pack "C*", 128); # BOMB, core dump
>
> (I'm cutting and pasting this from a perl debugger session, so if
> that's not quite it, forgive me.)
>
> DBI version 1.18
> DBD::Pg version 1.00
> postgresql version 7.1.2
> Perl version 5.5.3
>
>
>
>
>