PostgreSQLにおいて、バグを発見された場合、 是非、ご連絡下さい。 すべてのプラットフォーム、すべての環境で PostgreSQLの機能すべてが正常に動くことを保証できないので、バグレポートは PostgreSQLをより信頼性の高いものにするために、 大変有効的となります。
下記の記述は、バグレポートが有効的に活用されるためのものです。 これに従う義務はありませんが、沿った方がより有益なものとなるでしょう。
発見されたバグは直ちに修正されるとは限りません。そのバグが明確で、重大である他の 多くのユーザにも影響を与えるものであれば、すぐに修正されるかもしれません。 また、より新しいバージョンに変えて、そこでも同じようなことが起こるかを 確認して頂くようにお勧めする場合もあります。あるいは、現在計画中の 大きな変更が終了するまでバグが修正しないと判断される場合もあります。 また、そのバグ修正はとても難易度が高いもので、後まわしになることも考えられます。 早急に処置が必要な場合は、商用サポートのご購入をご検討下さい。
バグ報告を行う前に、ドキュメントを再度読み返し、実行しようとしている 処理が実行可能かを確認して下さい。実行可能かどうかが不明な場合は、 その旨を報告して下さい(それはある意味ドキュメントのバグです)。 また、ドキュメントに書かれていることと実際の結果が異る場合は それはバグとなります。それらの一部の例を下記に記します。
プログラムが致命的なシグナル、またはオペレーティングシステムの エラーメッセージで終了し、それがプログラムの問題を指す場合。 (その反例として、"disk full"メッセージが あげられ、これらはご自分で修正して下さい。)
あるプログラムで、入力された値に対して必ず間違った結果を返す場合。
(ドキュメントで定義されている)有効な値を入力してもプログラムで受け付けない場合。
無効な値を入力し、エラーメッセージなどを表示させずにプログラムが その値を受け入れる場合。(しかし、無効な入力と思われているのもは、 実際は伝来の実装の拡張である可能性もありますのでご注意下さい。)
サポートされているプラットフォームで、PostgreSQLが コンパイル、ビルド、またはインストールできない場合。
プログラムの実行が遅かったり、リソースを大量に使用するのは必ずしもバグではありません。 アプリケーションを改善するためには、ドキュメントを読んだり、メーリングリストで 尋ねてみたりして下さい。SQLの要求に応じない場合、 問題点が明確に特定できない限り、それはバグとは言えません。
また、TODO listや、FAQなどをご覧になって、そのバグが既に認知されているかの 確認を行って下さい。もしTODO listに書かれていなければ、報告を行って下さい。
バグ報告でもっとも重要なことは、すべての事実を明確に記述し、また、記述されたものは 事実のみである、ということです。何が起こったのか、または、プログラムのどこが問題か、 "何々が起こっているようだ"などの憶測や推測を記述しないで下さい。 実装にさほど詳しくない方の推測は正しくない場合があり、有効なバグ報告を なりません。実装に精通している方も、根拠のある説明は参考情報となりますが、 事実にはなりかねます。バグを修正するためには、まず開発者自身が そのバグを再現できないと始められません。ありのままの事実を報告するのは 単刀直入ですが(多くの場合スクリーンからメッセージをコピー&ペーストを行うのみ)、 多くの場合、それだけでは情報が不十分で、重要な情報が洩れてしまっています。
すべてのバグ報告では、下記の内容が記述されていなければなりません。
問題を再現できるように、プログラムの起動から 行った作業を順序通りに記述して下さい。例えば、結果が、テーブルのデータに 依存するならば、単にselect文を記述されていても、それ以前に行われた、 テーブルの作成やinsert文が記述されていなければ十分とは言えません。 データベースの概要を分解模倣する時間のロスや、データを開発者が 作成したら同じ現象が起こらないかもしれない、などのことが 発生します。問い合わせ関連のテストケースのもっとも良いとされるバグ報告方法は、 フロントエンドであるpsqlに直接読み込ませられる ファイルを用意することです。(~/.psqlrcの起動ファイルに 何も書かれていないことに注意して下さい。)このファイルのもっとも簡単な取得方法は pg_dumpを使ってテーブル定義と その状況を再現させるために必要なデータを取り出し、 問題の起こった問い合わせを追加します。例の数を減らすことを奨励しますが、 必ずしも必要ではありません。どちらにしろ、バグが再現できれば分かります。
アプリケーションがPHPなどの、他のクライアントインターフェースを使用する場合、 問い合わせからそれらを分離させてください。問題を再現するために 新たにウェブサーバを立ち上げることはまずありません。どのような場合においても、 正確な入力ファイルを作成して報告して下さい。"大きいファイルで起こる"、 "中規模データベース起こる"などは正確な情報ではないので、このように推測は しないで下さい。
得た結果に関しては、"上手くいかなかった"や"クラッシュした" などの報告はしないで下さい。エラーメッセージがあるならば、たとえ 意味が理解できなくてもそれを報告して下さい。オペレーティングシステムの エラーでプログラムが強制終了してしまったら、どのエラーでそうなったのかを 報告して下さい。何も起こらない場合も、その旨を報告して下さい。 たとえテストケースの結果がプログラムのクラッシュなどの場合は、 再現できない場合があります。もっとも容易な方法は、結果をターミナルから コピーするものです。
Note: 致命的なエラーが起こった場合、クライアントから送られてきたエラーメッセージは 必要な情報すべてが書かれているとは限りません。この場合、データベースサーバの ログを見てみて下さい。もしログを取っていないならば、取る習慣を付けて下さい。
どのような結果を望んでいたのかも記述して下さい。ただ単に "このコマンドはこのような結果を返した"や、"このような結果を望んでいなかった"だけでは、 再現し、結果を検証したときに、開発者にとってはそれは正しい結果である 可能性があります。送られてきたコマンドの背後にある意味をすべて 把握することはできません。また、特に"SQLではこう書かれていない"や "Oracleではこのようにならない"というコメントはご遠慮願います。 SQLの正確な動作を捜し出すのは請負兼ねるますし、 また、世にある他のリレーショナルデータベースの 動作すべてをPostgreSQLの開発者は把握していません。
コマンドラインと起動の際のあらゆるオプションとデフォルトから 変更した環境変数や設定も正確に記述して下さい。前もってパッケージされた ディストリビューションを使用し、起動時にデータベースサーバも起動する場合は それらがどのように実行されているかを確認する必要があります。
インストール説明とは異った方法で行った作業をすべて記述して下さい。
SELECT version();で接続しているPostgreSQLの バージョンを調べ、それも記述して下さい。多くの実行可能なプログラムでは --versionオプションも使用できます。 少なくとも postmaster --version and psql --version は実行できるはずです。 それらの機能やオプションが使用できない場合は、そのバージョンは とても古いものであると言えます。また、ソースディレクトリ、 READMEファイル、または ディストリビューションファイルの名前やパッケージ名 をご覧下さい。
7.1よりもバージョンが古い場合、アップグレードすることを お勧めします。それは、新しいリリースには多くのバグが修正されていますし、 修正するために新しいバージョンをリリースしているからです。
プラットフォーム情報をカーネル名とバージョン、Cライブラリ、 プロセッサー、メモリ情報も含めて報告して下さい。多くの場合、 ベンダー名とそのバージョンを明記して頂くだけで十分ですが、 開発者がその"Debian"になにが含まれているかや、どの Pentiumを使用しているなどのことを把握していないことを 覚えておいて下さい。インストールの問題がある場合は コンパイラやmakeの情報も必要となります。
問題が解決するために時間をかけて入力値を色々と変えてみてるのは 問題を解決するには得策とは言えません。バグが即座に修正されない場合、 その間を利用して色々と試してみて下さい。バグがなぜあるのかを 解明するのに余計な時間を取る必要はありません。
バグ報告をする際、理解しやすい用語を使用して下さい。 このソフトウェアパッケージは"PostgreSQL"と呼ばれていますが、 略して"Postgres"とも呼ばれます。("Pgsql"とも略される場合がありますが、 使用しないで下さい。)特にバックエンドサーバに関して述べるときは、 そのように明記し、"Postgresがクラッシュする"とだけ明記しないで下さい。 インターアクティブなフロントエンドは"psql"と呼ばれ、 バックエンドから切り離す目的で使用します。
一般的には、<pgsql-bugs@postgresql.org>の バグ報告用メーリングリストにバグ報告をお送り下さい。 バグ報告の題名には、エラーメッセージの一部分などを 使用して下さい。
<pgsql-sql@postgresql.org>や<pgsql-general@postgresql.org> には決してバグ報告を送らないで下さい。これらのメーリングリストは バグ報告を必要としないユーザ間の場となっています。 また、多くの場合、そのメーリングリストに参加している人は バグを修正する可能性は低いでしょう。
また、<pgsql-hackers@postgresql.org>にもバグ報告を 送らないで下さい。ここはPostgreSQL の開発に関して議論する場で、バグ報告とは切り離している方がよいとされています。 後で、そのバグ報告がこのメーリングリストで議論される場合は十分ありえます。
ドキュメントに関して問題がある場合は、ドキュメント用の メーリングリスト、<pgsql-docs@postgresql.org>に 報告して下さい。その際、ドキュメント、章、節を明記して下さい。
また、サポートされていないプラットフォームへの移植に関係する バグ報告である場合は<pgsql-ports@postgresql.org>に 報告して下さい。そのプラットフォームへPostgreSQLを 移植するように最善の努力を致します。
Note: spamメールをふさぐために、残念なことに、これらのメーリングリストは closedとなっています。つまり、これらのメーリングリストに投稿するには、 講読しなければなりません。単にメールを送りたい場合は、購読し、 講読オプションをnomailに設定して下さい。より 詳細については<majordomo@postgresql.org>宛に 本文にはhelpとだけ書いてメールをお送り下さい。