DBD::Pg 1.42

libpqメジャーバージョンアップ
http://cpan.uwinnipeg.ca/module/DBI #リリースノートに書いてあった気がしたけど見つからず
PostgreSQL8.0.1 -> 8.0.2からlibpqのメジャーバージョンが上がった。
(libpq3 -> libpq4)
これに伴いDBD::Pgがlibpq4対応の1.4系が出ている。


DBD::Pg バージョンアップ
てことでDBD::Pgを最新版にした。http://cpan.uwinnipeg.ca/module/DBD::Pg
DBIも最新版(1.48)にした。http://cpan.uwinnipeg.ca/module/DBI


ここで問題が発生。データ型を指定したSQL文を実行するとエラーになる。どうも変数展開が上手くいってないみたい。
[SQL]実際のSQLではなく適当に書いているので間違ってるかも
my $time = '2005-05-31 00:00:00';
my $sth = $dbh->prepare ("SELECT count(*) FROM table1 WHERE column_time >= timestamp ? + interval '1 hour'");
$sth->execute( $time ) or die $dbh->errstr;
[エラー($dbh->errstr)]
DBD::Pg::stexecute failed: ERROR: syntax error at or near "$1" at character 211


原因/対処方法
psql上で実行すると上手くいくのでDBD::Pgの仕様変更なのかバグなのか。
型定義(tiestamp)が使えないとintervalが利用できないので、+ '1 hour'をアプリ側で算出して対応。
後でソースを見てみよう