यह एक लेन-देन के मुद्दे की तरह लगता है, जहां आप COMMIT
नहीं हैं काम करने के बाद अपने लेन-देन को टिंग करना, इसलिए परिवर्तन खो जाते हैं। यदि आपका SQLite ड्राइवर COMMIT
में डिफॉल्ट करता है टिंग लेन-देन जो एक स्पष्ट COMMIT
के बिना बंद हो जाते हैं या रोलबैक, और आपका Pg ड्राइवर डिफ़ॉल्ट रूप से ROLLBACK
, आपको वर्णित व्यवहार मिलेगा। ऐसा ही होगा यदि SQLite डिफ़ॉल्ट रूप से प्रत्येक स्टेटमेंट को ऑटोकॉमिटिंग करने के लिए डिफॉल्ट करता है, और Pg ड्राइवर ड्राइवर लेनदेन को खोलने में चूक करता है।
यह परीक्षण के लिए उसी स्थानीय डेटाबेस का उपयोग करने के कई अच्छे कारणों में से एक है, जब आप लाइव होने के लिए परिनियोजित करने जा रहे हैं।
यदि आप सामान्य Pg उदाहरण पर होते तो मैं आपको log_statement = 'all'
सक्षम करने के लिए कहता। में postgresql.conf
, पीजी पुनः लोड करें, और लॉग देखें। आप हेरोकू पर ऐसा नहीं कर सकते हैं, लेकिन आपके पास heroku logs --ps postgres
के साथ Pg लॉग तक पहुंच है। . ALTER USER my_heroku_user SET log_statement = 'all';
चलाने का प्रयास करें , पुन:परीक्षण, और लॉग की जांच करना।
वैकल्पिक रूप से, Pg को स्थानीय रूप से स्थापित करें।
अन्य कम संभावनाएँ जो दिमाग में आती हैं:
- आप पढ़ने के लिए लंबे समय से चल रहे SERIALIZABLE लेनदेन का उपयोग कर रहे हैं, इसलिए उनका स्नैपशॉट कभी भी अपडेट नहीं होता है। बहुत कम संभावना है।
- डेटाबेस ऑब्जेक्ट पर अनुमतियाँ
INSERT
का कारण बन रही हैं एस,UPDATE
s, आदि विफल होने के लिए, और आपका ऐप परिणामी त्रुटियों को अनदेखा कर रहा है। फिर से, संभावना नहीं है। - आपके पास
DO INSTEAD
. है नियम जो आपकी अपेक्षा के अनुरूप नहीं हैं, याBEFORE
ट्रिगर जोNULL
लौटाते हैं , इस प्रकार चुपचाप संचालन को नो-ऑप्स में बदल देता है। यदि आप SQLite के साथ परीक्षण कर रहे हैं तो संभावना नहीं है। - आप जिस DB से पढ़ रहे हैं, उससे भिन्न DB को लिख रहे हैं। उन सेटअपों में असंभव नहीं है जो हॉट स्टैंडबाय आदि के समूह से पढ़ने का प्रयास कर रहे हैं।