[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 メーリングリストの案内