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ならバイナリ用の新しい型とかできてそうだ。