Windows+ActivePerl+DBD-PgPP
どうしてもWindowsサーバで、
perlとPostgreSQLを使った開発をしなければならない時があって、その時に謎のエラーに悩まされた時の事を、つらつらとメモ書きしておきます。
いや、結果的には謎のエラーでは無かったのですが、ネットで探しても全然情報が無かったので、同じような現象に遭遇した人の解決の糸口の一つになれば幸いです。
そもそもWindows+Perl+PostgreSQLで開発しねーYO!!とか言わないでね。
そして私が遭遇した現象・・・・・
1.開発完了!めでたし!!
2.本番運用
3.ひたすら本番運用・・・・・
4.数年経って、忘れた頃にエラー報告。DBアクセスして検索結果一覧を表示させる画面でレスポンスが無くなりタイムアウトを起こす。そして、同画面では絶対落ちる訳ではなく、落ちない時もある。
5.検証を続けるも、システム的には問題無い、ように見える。
6.エラーが出た時のDBダンプを、無理を言ってもらってみる。
7.データ的には問題無い・・・・・が、テスト環境で該当画面を色々な形で表示させていたら、同様のエラーが出てしまった・・・・・
8.該当レコードは特定出来た!どの部分がおかしいか特定する為に、データを切って貼ってしていたのだが、特定のおかしなデータ(文字など)がある訳ではなく、むしろデータ量が大きい時に落ちる??ような動作に見える・・・・・なんじゃそりゃ?
こんな感じです。
原因と思わしきもの。
言い方が正しいのか分かりませんが、DBD::PgPPのデフォルトでは、バッファサイズ制限があり、1500byteっぽいです。
なので、select等で問い合わせた結果のデータに大きいデータが入っていると、PgPPが止まってしまう?というような感じかなぁ。それにしても1500って少なくね?ということで、
[Perlインストールパス]\site\lib\DBD\PgPP.pm
の、以下の箇所の「1500」を、適当な数値に増やす!
398行目辺り use constant BUFFER_LENGTH => 1500;
968行目辺り $handle->recv($packet, 1500, 0);
1075行目辺り $handle->recv($packet, 1500, 0);
ニンニン
Perl関連リンク
サイト
Binbo-Special > 技術情報らしきもの > Perl
当サイトです。
書籍
すぐわかる オブジェクト指向 Perl
ちょっと変わり種?だなぁ、と思う本。読みやすいです。やっぱりPerlでオブジェクト指向なんて面倒くさいなぁと思う事うけあい(笑)
