Postgresを使用するDjango 1.3プロジェクトで、「DatabaseError: current transaction is aborted」(具体的には、841回のうち11回) が発生します。プロジェクトはクイズ サイトであり、ユーザーがビューで回答フォームを送信するとエラーが発生します。データベースの観点から見ると、このプロセスには多くのクエリが含まれており、次のようになります。
- 質問に対する正しい答えをすべて集めます (選択式であり、複数の答えが必要な場合があります)*
- ユーザーのプロフィールを取得する
- この回答を保存
- ユーザーの新しいポイント合計のクエリ
- 合計をプロフィールに保存する
- 新しい報酬の資格があるかどうかを確認する
- そうする場合、新しい報酬を授与します
その苦労したプロセスのどこかで、このエラーが発生します (1 つのクエリが他のクエリを待っていないためだと思います)。この場合、本番環境 (つまり、DEBUG = False) でデータベース エラーをログに記録する方法はありますか? WebFaction を使用していますが、Postgres エラー ログを利用できません。このミドルウェアの例から何かを盗んで、この特定のケースで起動することはできますか?
または、このエラーを見つけるためのより良い方法はありますか、それとも個々のクエリをトランザクションでラップする必要がありますか (残念ながら、それらはすべてコード内の同じ場所にあるわけではありません。ビューをトランザクション デコレータでラップすることが役立つかどうかはわかりません)。
*混乱させるために、複数の正答要件は開発の途中で追加され、ライブの直前に削除されたため、基本的に手順 1 と 4 をスキップして、このプロセスを多少簡略化できましたが、この種の不可解な問題に対する一般的な答え。