[pgsql-jp: 38463] カンファレンス雑感とエラーコードについて

ISHIDA Akio iakio @ mono-space.net
2007年 6月 7日 (木) 17:33:18 JST


こんにちは。石田@苫小牧市です。

カンファレンスお疲れさまでした。大変楽しませていただきました。

さてパネルセッションでエラーコードの話題があったので雑感を。

PostgreSQLは、おそらくバジョン7.4から、標準SQLで定義されている
エラーコードを返却するようになっています。

http://www.postgresql.jp/document/current/html/errcodes-appendix.html

これは、libpqではPQresultErrorField関数で取得できます。

http://www.postgresql.jp/document/current/html/libpq-exec.html

例えばPHPからだと、pg_result_error_fieldでエラーコードを取得できます。

http://www.php.net/manual/ja/function.pg-result-error-field.php

(他の言語のインタフェースがどうなっているかご存知の方は
教えていただきたいです)

ですが、この辺の機能はあまり知られていないようです。
たとえばPHPのMDB2_Driver_pgsqlのエラーハンドリングのように。

http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/pgsql.php?revision=1.175&view=markup

普段あまりエラーコードを見掛けることがないというのも
ひとつの理由だと思います。

で、今知ったのですが、psqlにはエラーメッセージの冗長性を制御する
機能があります。

db1=> SELECT x;
ERROR:  column "x" does not exist
db1=> \set VERBOSITY verbose
db1=> SELECT x;
ERROR:  42703: column "x" does not exist
        ^^^^^---ここがSQLSTATE
LOCATION:  transformColumnRef, parse_expr.c:396

個人的にはこれがデフォルトで表示してあれば(あと、せめて
"sqlstate=42703"とか出して欲しい)、もうちょっと
認知されるのではないかと思いました。


-- 
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>



pgsql-jp メーリングリストの案内