end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

postgresにバイナリデータを格納

PostgreSQLにはバイナリデータを格納する為にbytea型という独自仕様が用意されていますが、私の場合、Base64 encoding後、text型へ格納しています。

CREATE TABLE data_binary ( file_name text primary key,
                           data      text );

次の例は、compress + base64 を行っています。

use Compress::Zlib;
use MIME::Base64 ();

sub insert_binary {
    my ($self,$fil_name,$data) = @_;

    #compress + Base64
    my $enc_data = $self->encode_bynary($data);

    my $sql =<<EOF;
insert into data_binary (file_name,data)
values (?,?)
EOF
    my $sth = $self->{dbh}->prepare($sql);
    $sth->execute($file_name,$enc_data);
    return 1;
}

sub encode_bynary {
    my ($self,$src) = @_;
    $src = compress($src);
    return MIME::Base64::encode($src);
}