0

django postgres db にデータをプッシュする小さな python スクリプトがあります。関連するモデルを django プロジェクトからインポートし、.save 関数を使用して問題なくデータをデータベースに保存します。

昨日、システムは正常に動作していました。django プロジェクトと python スクリプトの両方を 1 日に何度も開始および停止しましたが、その日の終わりまで、コンピューターを再起動したり電源を切ったりすることはありませんでした。

今日、データがデータベースにないことを発見しました!

ばかげているように思えますが、おそらく明らかなことを忘れていたのでしょうが、モデルから保存関数が呼び出されると、データがデータベースにコミットされると思いました。

4

1 に答える 1

1

したがって、この回答は「このような問題のトラブルシューティングを開始する場所」です。質問が非常に曖昧であり、効果的にトラブルシューティングを行うための十分な情報がないためです。

これが再び発生した場合は、最初に PostgreSQL のステートメントのログ記録をオンにして、ステートメントが入ってくるのを確認します。これにより、ステートメントとクエリの開始とコミットが表示されるはずです。クエリにアクセスせずに、この種の問題をトラブルシューティングすることは事実上不可能です。探すべきものには、欠落している COMMIT や欠落しているステートメントが含まれます。

その後、次に行うことは、コンピューターが再起動した状況を調べることです。予想されるコミットの前にそうした可能性はありますか? または、電源が失われ、トランザクション ログがディスクにフラッシュされませんでしたか?

これら 2 つは、開発環境の db 側で考えられるすべての原因を除外する必要があります。古いバージョンの PostgreSQL の運用環境では、システムで自動バキュームが適切に実行されていること、および xid ラップアラウンドに関する警告が表示されていないことを確認する必要があります。新しいバージョンでは、PostgreSQL は xid ラップアラウンドに近づくとクエリの受け入れを拒否するため、これは問題ではありません。

于 2013-03-25T01:23:35.990 に答える