`pg_tblspc` OS X (Yosemite या El Capitan) के नवीनतम संस्करण की स्थापना के बाद गायब है


464

मैं अपने OS X में होमब्रे से पोस्टग्रेट्स का उपयोग करता हूं, लेकिन जब मैं अपने सिस्टम को रिबूट करता हूं, तो कभी-कभी रिबूट के बाद पोस्टग्रेज शुरू नहीं होते हैं, और इसलिए मैंने मैन्युअल रूप से इसे शुरू करने की कोशिश की postgres -D /usr/local/var/postgres, लेकिन फिर निम्न संदेश के साथ त्रुटि हुई FATAL: could not open directory "pg_tblspc": No such file or directory:।

पिछली बार जब ऐसा हुआ था, तो मैं इसे मूल स्थिति में नहीं ला सका था, इसलिए मैंने पूरे पोस्टग्रेज सिस्टम को अनइंस्टॉल करने का फैसला किया और फिर इसे फिर से स्थापित किया और उपयोगकर्ताओं, टेबल, डेटासेट आदि को बनाया ... यह बहुत ही घृणित था, लेकिन यह अक्सर मेरे सिस्टम पर होता है, कुछ महीनों में एक बार कहते हैं।

तो यह pg_tblspcफ़ाइल को बार-बार क्यों खोता है ? और क्या ऐसा कुछ है जो मैं फ़ाइल के नुकसान से बचने के लिए कर सकता हूं?

मैंने अपना होमब्रेव अपग्रेड नहीं किया है और नवीनतम संस्करण (यानी मैं उसी संस्करण का उपयोग कर रहा हूं) को पोस्टग्रेज करता हूं। इसके अलावा, पोस्टग्रैज डेटाबेस पर मैंने जो कुछ भी किया था, वह टेबल को डिलीट कर देता है और हर दिन नए डेटा को पॉप्युलेट करता है। मैंने उपयोगकर्ता, पासवर्ड, आदि को नहीं बदला है ...

EDIT (mbannert): मुझे यह जोड़ने की आवश्यकता महसूस हुई, क्योंकि इस मुद्दे के लिए थ्रेड गूगल पर शीर्ष हिट है और कई लक्षणों के लिए अलग है। संभावित रूप से Homebrewers इस त्रुटि संदेश का सामना करेंगे:

No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

तो, अगर आप अभी यह अनुभव करते हैं कि योसमाइट अपग्रेड के बाद अब आप इस धागे को पढ़ रहे हैं।


हां, यह वास्तव में, वास्तव में नहीं होना चाहिए! जब आप "नवीनतम संस्करण" कहते हैं, तो कृपया सटीक संस्करण संख्या दिखाएं। इसके अलावा, क्या आपने बाहरी संग्रहण पर कोई तालिकाओं को रखा है? PostgreSQL डेटा निर्देशिका कहाँ स्थित है?
क्रेग रिंगर

इसके अलावा, pg_tblspcएक निर्देशिका है । एकमात्र तरीका मैं इस निर्देशिका को देख सकता हूं और बस यह निर्देशिका बेतरतीब ढंग से गायब हो रही है फ़ाइल सिस्टम भ्रष्टाचार या विशेष रूप से बुरी तरह से व्यवहार किया गया वायरस स्कैनर या सिंक सिंक टूल।
क्रेग रिंगर

मेरे पास कोई वायरस स्कैनर नहीं है। मुझे नहीं पता कि क्या tablespacesहै, इसलिए मुझे नहीं लगता कि मैंने इसे बाहरी भंडारण पर रखा है।
ब्लैसजार्ड

हम्म। मैं आपको बता सकता हूं कि कुछ बुरी तरह से गलत है। pg_tblspcमैं अभी तक सामना किए गए किसी भी सिस्टम पर गायब नहीं होता, और न ही मैं ऐसा करने की कोई ठोस कल्पना कर सकता हूं। यह कहना बहुत कठिन होने वाला है कि आपके सिस्टम को बहुत अधिक विस्तार के बिना क्या अलग बनाता है।
क्रेग रिंगर

2
क्या आप इस @Gardecolo के लिए एक समाधान खोजने में सक्षम थे? Yosemite में अपग्रेड करने के बाद मुझे यही समस्या हो रही है।
डोनोवन

जवाबों:


928

हल ... भाग में।

जाहिरा तौर पर, OS X (जैसे Yosemite या El Capitan) के नवीनतम संस्करणों को स्थापित करने से कुछ निर्देशिकाओं को हटा दिया जाता है /usr/local/var/postgres

इसे ठीक करने के लिए आप बस लापता निर्देशिकाओं को फिर से बनाएँ:

mkdir /usr/local/var/postgres/pg_tblspc
mkdir /usr/local/var/postgres/pg_twophase
mkdir /usr/local/var/postgres/pg_stat
mkdir /usr/local/var/postgres/pg_stat_tmp
mkdir /usr/local/var/postgres/pg_replslot
mkdir /usr/local/var/postgres/pg_snapshots

या, अधिक संक्षेप में ( नैट के लिए धन्यवाद ):

mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/

रिडरिंग pg_ctl start -D /usr/local/var/postgresअब सर्वर को सामान्य रूप से शुरू करता है और, कम से कम मेरे लिए, बिना किसी डेटा हानि के।

अपडेट करें

मेरे सिस्टम पर, Postgres चलने पर भी कुछ निर्देशिकाएँ खाली हैं। हो सकता है, कुछ "सफाई" ऑपरेशन के हिस्से के रूप में, योसेमाइट किसी भी खाली निर्देशिका को हटा दे? किसी भी मामले में, मैंने आगे बढ़कर प्रत्येक निर्देशिका में एक case .keep ’फ़ाइल बनाई, ताकि भविष्य में विलोपन को रोका जा सके।

touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep

नोट : .keepउन निर्देशिकाओं में फ़ाइल बनाने से आपके लॉगफ़ाइल में कुछ शोर पैदा होगा, लेकिन किसी अन्य चीज़ को नकारात्मक रूप से प्रभावित नहीं करता है।


53
अधिक संक्षिप्त आदेश के लिए बस एक सुझाव: mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/औरtouch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
नैट

26
वे .i फ़ाइलें वास्तव में मुझे सर्वर लॉग में कुछ दु: ख का कारण बनती हैं:could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
funwhilelost

13
मुझे pg_snapshots और pg_stat निर्देशिकाएं भी गायब थीं।
जॉन स्टीवंस

8
मुझे एक अतिरिक्त निर्देशिका 'pg_replslot' भी बनानी पड़ी। सिवाय इसके कि यह ठीक काम करता है। धन्यवाद!
लुकास

6
बोतलबंद के लिए @Lucas के रूप में अनुभवी 9.4.1 पोस्टग्रेट्स। मैं पड़ा mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
पैट्रिक फैरेल

9

डोनावन का उत्तर हाजिर है, मैं बस यह जोड़ना चाहता था कि जैसे मैंने डेटाबेस के साथ अलग-अलग चीजें कीं (जैसे rake db:test), यह अलग-अलग निर्देशिकाओं की तलाश में था, जो ऊपर उल्लेख नहीं किया गया है और जब वे मौजूद नहीं थे, तब घुट जाएंगे। मेरा मामला है pg_logical/mappings, तो आप एक टर्मिनल चलाने के लिए सेटअप कर सकते हैं:

tail -f /usr/local/var/postgres/server.log

और जब आप अपनी विशिष्ट डेटाबेस गतिविधियों के माध्यम से जाते हैं, तो इसे लापता फ़ोल्डरों के लिए देखें।


3
Mkdir -p / usr / local / var / postgres / pg_logical / {snapshots, mappings} जोड़ने की आवश्यकता है
peter_v

6

यह थोड़ा ऑफ-टॉपिक है लेकिन यहाँ पोस्टग्रेसीक्यूएल योसेमाइट रिकवरी प्रक्रिया के हिस्से के रूप में ध्यान देने योग्य है। मैं ऊपर के रूप में एक ही मुद्दा था और मैं PostgreSQL "प्रतीत होता है" के साथ एक मुद्दा था पृष्ठभूमि में चल रहा है ताकि निर्देशिकाओं को जोड़ने के बाद भी पुनरारंभ नहीं हो सके। मैंने pg_ctl stop -m fastPostgreSQL सर्वर को मारने की कोशिश की, लेकिन कोई किस्मत नहीं। मैंने भी सीधे प्रक्रिया के बाद जाने की कोशिश की, kill PIDलेकिन जैसे ही मैंने किया कि एक अलग PID के साथ एक PostgreSQL प्रक्रिया फिर से दिखाई दी।

.plistहोमबॉव लोड की गई एक फ़ाइल को कुंजी समाप्त हो गई ... मेरे लिए फिक्स समाप्त हो रहा है:

launchctl unload /Users/me/Library/LaunchAgents/homebrew.mxcl.postgresql92.plist

उसके बाद मैं सामान्य रूप से PostgreSQL शुरू करने में सक्षम था।


मेरा प्लिस्ट थोड़ा अलग नाम दिया गया था: launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plistलेकिन मूल रूप से मेरे लिए भी यही समस्या थी, और एक ही समाधान।
onekiloparsec

4

लापता निर्देशिका को आपके PostgreSQL डेटा निर्देशिका में मौजूद होना चाहिए। डिफ़ॉल्ट डेटा निर्देशिका है /usr/local/var/postgres/। यदि आपने एक अलग डेटा निर्देशिका स्थापित की है, तो आपको वहां लापता निर्देशिकाओं को फिर से बनाना होगा। यदि आपने होमग्रॉव-अनुशंसित .plistफ़ाइल को संशोधित किया है जो PostgreSQL शुरू करता है, तो आप वहां डेटा निर्देशिका पा सकते हैं:

cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

(यह वह -Dविकल्प है जिसके साथ आपने शुरुआत की थी :)

  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/postgres</string>
    <string>-D</string>
    <string>/usr/local/pgsql/data</string>

ऊपर दिए गए उदाहरण में, आप लापता निर्देशिकाओं को इस /usr/local/pgsql/dataतरह बनाएंगे :

cd /usr/local/pgsql/data
mkdir {pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots,pg_logical}
mkdir pg_logical/{snapshots,mappings}

-20

लापता निर्देशिका बनाना निश्चित रूप से काम करता है, लेकिन मैंने इसे पोस्टग्रैब्स डीबी को फिर से संगठित करके तय किया, यह भविष्य की समस्याओं से बचने के लिए एक क्लीनर दृष्टिकोण है।

नोट: यह दृष्टिकोण मौजूदा डेटाबेस को हटा देगा

$ rm -r /usr/local/var/postgres
$ initdb -D /usr/local/var/postgres

19
जाहिर है कि मौजूदा डेटाबेस को हटाना यहां कोई मामूली अपवाद नहीं है। यह कहने के लिए थोड़ा सा "मुझे नहीं मिल सका / var / tmp इसलिए मैंने ऑपरेटिंग सिस्टम को फिर से इंस्टॉल किया।"
एडम डोनह्यू

4
ओह, यार, यह "क्लीनर" कुछ भी है जो मैं सोच सकता हूं :) बस उम्मीद करता हूं कि इंटरवेब से कुछ यादृच्छिक कॉपी-पिस्टर इसे सीधे अपने कंसोल में इसे देखे बिना शूट नहीं करेंगे :)
हैल ürzgür

2
डाउन वोट ग्रेग के लिए क्षमा करें, लेकिन मैं आपके समाधान को फिर से निर्धारित करने की सलाह देता हूं ताकि यह स्पष्ट हो सके कि इस दृष्टिकोण का उपयोग केवल विकास में किया जाना चाहिए या यदि उपयोगकर्ता अपने डीबी को मिटा सकता है।
11

1
इसे इतना नीचे क्यों उतारा गया है? एक देव सर्वर पर यह सही तरीका है।
जॉर्डन बेडवेल

@JordonBedwell यहां तक ​​कि एक देव सर्वर पर भी बुरा विचार है, जब तक कि आप अपने कंप्यूटर पर db का उपयोग करके एक ही ऐप के साथ नहीं खेल रहे हैं .. यह ऐसा है जैसे "मैं अपना पसंदीदा कोड संपादक शुरू नहीं कर सकता, आइए ओएस को फिर से स्थापित करें"
आंद्रे फिगएरेडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.