PerlでPostgresのバイナリデータを扱う

PostgreSQLでは昔からバイナリデータを扱うにはbytea型を使うみたい
バイナリーデータの格納
ドキュメントではJDBCによる例のみなのでPerlで試した時のメモ


定義したテーブルは以下

create table my_datas(
  id serial primary key,
  rawdata bytea
);

Perlソースは以下(抜粋のうえ超適当)、DBIモジュールを使用

#!/usr/bin/perl

use DBI;

my $DB_HOST="***";
my $DB_NAME="****";
my $DB_USER="****";
my $DB_PASS="****";

my $dsn = "dbi:Pg:host=${DB_HOST} dbname=${DB_NAME}";
my $db = DBI->connect_cached(${dsn}, ${DB_USER}, ${DB_PASS},
                             {
    AutoCommit => 0,
    RaiseError => 0,
    RowCacheSize => 1000
}) || die "can't connect $DB_NAME";

my $buffer = "HOGE";
my $sql_insert = << "SQL";
INSERT INTO my_datas(rawdata)
VALUES(?);
SQL
my $sth = $db->prepare($sql_insert);
$sth->bind_param(1, $buffer, DBI::SQL_VARBINARY);
$sth->execute();
$db->commit();

my $sql_check = << "SQL";
SELECT rawdata FROM my_datas order by id DESC limit 1 
SQL

my $check = $db->selectrow_arrayref($sql_check);
my $data = $check->[0];


$db->disconnect();
exit();

こんな感じで。

ただ参考にした公式ドキュメントも古いし、新しいPostgreSQLならバイナリ用の新しい型とかできてそうだ。