PL/pgSQLでメッセージ出力
PostgreSQL でストアドプロシージャを作るには PL/pgSQL というSQL手続き言語を使います。
Oracle でいうところの PL/SQL (だったっけ) にあたる SQL 手続き言語です。
ストアドプロシージャを使うと数回 SQL を実行してその結果をごにょごにょまとめたりした結果を1回の select 文で取り出せたりするので便利なのですが、CGI のコードだけ見ても把握できないのが難ですね。
で、人が作ったストアドプロシージャをちょっと改造しなくてはいけなくなって、function 定義を読んちょこちょこっと手を入れてみたのですが思うように動かない。
私はデバッグするときにはデバッガはほとんど使っていなくて、デバッグライトを入れまくってどのようにコードが動くのか把握しながら直します。。アナログすぎかもしれませんが、スクリプトはこれで案外事足りるので。
そんなわけで、今回もストアドプロシージャをデバッグするのにメッセージ出力をしたのでそのメモ。
RAISE DEBUG "temp.name is %", temp.name;
と入れておけば、その時点での temp.name が出力されます。
私はこれを psql のコマンドラインで select * from your_stored_procedure(); とかやって表示結果を確認しています。
CGI などから呼び出した場合にこのデバッグライトがどこに出力されるのかは設定変数によるらしいです。
php なんて知らないけれど(ひどい、、)他の人が残していったプログラムを修正しなくちゃいけないときに少しだけいじってみたりするのですが、php でこのようなデバッグライトを標準エラーに出力する方法がいまだに分かりません。
それが分かれば大分楽になるんだが、どうやるんだろうか。