BYTEA / DBD::Pg change in 9.0 beta

From: Jesper Krogh <jesper(at)krogh(dot)cc>
To: pgsql-hackers(at)postgresql(dot)org
Subject: BYTEA / DBD::Pg change in 9.0 beta
Date: 2010-05-18 20:54:20
Message-ID: 4BF2FE7C.8080201@krogh.cc
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi.

I'm trying to do a test move of one of our applications onto 9.0beta1.
We use storable and serializes data into a bytea column in the database.
This script uses that:

#!/usr/bin/perl
use strict;
use warnings;
use Storable;
use DBI;
use DBD::Pg;
use Data::Dumper;

my $dbh = DBI->connect("dbi:Pg:dbname=testdb","","",{AutoCommit => 1});
my $sql = <<END
create table testtable (id serial, testbytea bytea);
END
;

eval {
$dbh->do($sql);
};
$dbh->do("delete from testtable");
my $href = { this => "1", that => "2"};
print "Before: " . Dumper($href) . "\n";
my $sth = $dbh->prepare("insert into testtable (testbytea) values (?)");
my $frozen = Storable::nfreeze($href);
$sth->bind_param(1, $frozen, { pg_type=>DBD::Pg::PG_BYTEA });
$sth->execute;
$sth = $dbh->prepare("select testbytea from testtable");
$sth->execute();
my $row = $sth->fetchrow_hashref();
my $href2 = Storable::thaw($row->{testbytea});

print Dumper($href2);

Running it against 8.4 gives:

$ perl bin/test-bytea
NOTICE: CREATE TABLE will create implicit sequence "testtable_id_seq1"
for serial column "testtable.id"
DBD::Pg::db do failed: ERROR: relation "testtable" already exists at
bin/efam/test-bytea line 16.
Before: $VAR1 = {
'that' => '2',
'this' => '1'
};

$VAR1 = {
'that' => '2',
'this' => '1'
};

Whereas 9.0beta1 gives:
$ perl bin/test-bytea
NOTICE: CREATE TABLE will create implicit sequence "testtable_id_seq1"
for serial column "testtable.id"
DBD::Pg::db do failed: ERROR: relation "testtable" already exists at
bin/efam/test-bytea line 16.
Before: $VAR1 = {
'that' => '2',
'this' => '1'
};

Storable binary image v60.48 more recent than I am (v2.7) at
../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/thaw.al)
line 366, at bin/test-bytea line 28

Inspecting the data seems that it is the insert that does something to
the data:

8.4
id | testbytea
----+----------------------------------------------------------------------------------------
9 |
\005\007\003\000\000\000\002\012\0012\000\000\000\004that\012\0011\000\000\000\004this
(1 row)

9.0beta1
id | testbytea
----+--------------------------------------------------------------
3 | \x050703000000020a013200000004746861740a01310000000474686973
(1 row)

Jesper

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Caleb Welton 2010-05-18 21:06:05 Re: Bug with ordering aggregates?
Previous Message Alvaro Herrera 2010-05-18 20:44:20 Re: fillfactor gets set to zero for toast tables