यह लेन-देन लॉग में एक चेकपॉइंट रिकॉर्ड की तलाश कर रहा है जो शायद मौजूद नहीं है या दूषित है। आप चलकर यह निर्धारित कर सकते हैं कि क्या यह मामला है:
# Postgres >= 10
pg_resetwal DATADIR
# Postgres < 10
pg_resetxlog DATADIR
यदि लेन-देन लॉग दूषित है, तो आपको एक संदेश दिखाई देगा जैसे:
<ब्लॉकक्वॉट>
डेटाबेस सर्वर सफाई से बंद नहीं किया गया था। लेन-देन लॉग को रीसेट करने से डेटा खो सकता है। यदि आप वैसे भी आगे बढ़ना चाहते हैं, तो -f
. का उपयोग करें बलपूर्वक रीसेट करने के लिए।
फिर आप निर्देशों का पालन कर सकते हैं और -f
. के साथ चल सकते हैं अद्यतन को बाध्य करने के लिए:
# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
इससे लेन-देन लॉग रीसेट हो जाना चाहिए, हालांकि यह आपके डेटाबेस को अनिश्चित स्थिति में छोड़ सकता है जैसा कि pg_resetwal
पर PostgreSQL दस्तावेज़ में बताया गया है। :
अगर pg_resetwal
शिकायत करता है कि यह pg_control
. के लिए मान्य डेटा निर्धारित नहीं कर सकता है , आप इसे -f
. निर्दिष्ट करके किसी भी तरह आगे बढ़ने के लिए बाध्य कर सकते हैं (बल) विकल्प। इस मामले में लापता डेटा के लिए प्रशंसनीय मूल्यों को प्रतिस्थापित किया जाएगा। अधिकांश क्षेत्रों से मेल खाने की उम्मीद की जा सकती है, लेकिन अगले ओआईडी, अगले लेनदेन आईडी और युग, अगली बहु-लेनदेन आईडी और ऑफसेट, और वाल प्रारंभिक स्थान फ़ील्ड के लिए मैन्युअल सहायता की आवश्यकता हो सकती है। इन क्षेत्रों को नीचे चर्चा किए गए विकल्पों का उपयोग करके सेट किया जा सकता है। यदि आप इन सभी क्षेत्रों के लिए सही मान निर्धारित करने में सक्षम नहीं हैं, -f
अभी भी उपयोग किया जा सकता है, लेकिन पुनर्प्राप्त डेटाबेस को सामान्य से भी अधिक संदेह के साथ व्यवहार किया जाना चाहिए:तत्काल डंप और पुनः लोड करना अनिवार्य है। डंप करने से पहले डेटाबेस में किसी भी डेटा-संशोधित संचालन को निष्पादित न करें, क्योंकि इस तरह की कोई भी कार्रवाई भ्रष्टाचार को और खराब कर सकती है।