Postgresql 9.2 pg_dump संस्करण बेमेल


141

मैं pg_dump टूल का उपयोग करके Postgresql डेटाबेस को डंप करने की कोशिश कर रहा हूं ।

$ pg_dump books > books.out

कैसे कभी मैं यह त्रुटि हो रही है।

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

--ignore-versionविकल्प अब पदावनत किया गया है और वास्तव में भले ही यह काम किया था अपनी समस्या से आ समाधान नहीं होगा।

मैं इस समस्या को हल करने के लिए pg_dump को कैसे अपग्रेड कर सकता हूं ?


जवाबों:


27

आप या तो pg_dumpक्लाइंट मशीन में PostgreSQL 9.2.1 स्थापित कर सकते हैं या सिर्फ $PGHOMEPostgreSQL सर्वर मशीन से क्लाइंट मशीन में कॉपी कर सकते हैं । ध्यान दें कि initdbक्लाइंट मशीन में एक नए क्लस्टर की आवश्यकता नहीं है ।

आपके द्वारा 9.2.1 सॉफ़्टवेयर स्थापित करने के बाद, अपनी .bash_profileफ़ाइल में कुछ पर्यावरण चर को संपादित करना याद रखें ।


75

मैंने उबंटू पर हरोकू का उपयोग करते हुए इसका सामना किया, और यहां बताया कि मैंने इसे कैसे तय किया:

  1. " लिनक्स डाउनलोड (उबंटू) " में वर्णित पोस्टग्रेएसक्यूएल एपेट रिपॉजिटरी को जोड़ें । (अन्य ऑपरेटिंग सिस्टम के लिए समान पृष्ठ हैं।)

  2. नवीनतम संस्करण में अपग्रेड करें (मेरे लिए 9.3):

    sudo apt-get install postgresql
  3. के /usr/binसाथ प्रतीकात्मक लिंक को फिर से बनाएँ :

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force

    /usr/lib/postgresql/...उपरोक्त पथ में संस्करण संख्या server versionआपके द्वारा प्राप्त त्रुटि में संख्या से मेल खाना चाहिए । इसलिए यदि आपकी त्रुटि कहती है pg_dump: server version: 9.9, तो लिंक करें /usr/lib/postgresql/9.9/...


यह तभी होता है जब आप PostgreSQL को अपग्रेड करते हैं। मैंने अभी-अभी OS की नई स्थापना की और इससे कोई समस्या नहीं हुई।
सेठ

किसी को भी आश्चर्य हो, यह समाधान गैर-हरोकू उबंटू पर भी लागू होता है।
इयानब्युसिएरेस

2
इस उत्तर में जो कहा गया है, उसके अनुसार यह बहुत बुरा विचार है।
आर्थर

वह उत्तर किसी फ़ोल्डर को हटाकर सॉफ़्टवेयर को हटाने की अनुशंसा करता है। यहाँ हम एक प्रतीकात्मक लिंक को फिर से बना रहे हैं।
सेठ

2
उत्तम! उन्नयन के बाद प्रतीकात्मक लिंक को फिर से
बनाना

61
  1. Pg_dump के संस्थापित संस्करण की जाँच करें:

    find / -name pg_dump -type f 2>/dev/null
  2. मेरा आउटपुट था:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. दो संस्करण स्थापित हैं। नए संस्करण के साथ pg_dump अपडेट करने के लिए:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

यह नए संस्करण के लिए सिमलिंक बनाएगा।


2
मेरे लिए यह बहुत जल्दी था कि संस्करणों का उपयोग किया जाएlocate pg_dump
Obromios

1
IMO, आपको नहीं जोड़ना चाहिए 2>/dev/nullक्योंकि यह कंसोल को प्रिंट करने के बजाय ERROR स्ट्रीम को बाहर कर देगा। मुझे लगता है कि कुछ दुर्लभ मामलों को छोड़कर, किसी भी त्रुटि को देखना चाहिए। उदाहरण के लिए, मेरे मामले में, यह मुझे याद दिलाता है कि मैं रूट नहीं था इस प्रकार कुछ निर्देशिकाओं को देखने में विफल रहा जहां नया pg_dump संस्करण स्थापित किया गया था। सामान्य तौर पर, त्रुटियों को दूर न करें।
पोउटरथोर

40

Mac में एक अंतर्निहित /usr/bin/pg_dumpकमांड होती है जिसे डिफ़ॉल्ट के रूप में उपयोग किया जाता है।

Postgresql स्थापित करने के साथ आपको एक और बाइनरी मिलता है /Library/PostgreSQL/<version>/bin/pg_dump


3
PostgreSQL कैसे स्थापित किया गया था, इसके आधार पर स्थान अलग-अलग होगा (EnterpriseDB इंस्टॉलर, MacPorts, Homebrew, आदि), लेकिन उत्तर का सार - कि उपयोगकर्ता के पास संभवतः पहले से इंस्टॉल किया गया सही संस्करण है - निश्चित रूप से सही है।
क्रेग रिंगर

3
मेरे मामले में, .bash_profile को खोलना और "निर्यात पथ = = अनुप्रयोग / पोस्टग्रेज्स / टैप / सामग्री / मैकोस / बिन: $ पाथ" जोड़ना ने जादू किया।
एलेक्स वेबर

29

आप केवल pg_dumpकमांड में पूर्ण पथ का पता लगा सकते हैं और उसका उपयोग कर सकते हैं

locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

अब बस कमांड में वांछित संस्करण के पथ का उपयोग करें

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out

1
CentOS उपयोगकर्ताओं के लिए (मेरा संस्करण 6.9 अंतिम है):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
डेविडसन लीमा

@ jDub9 डंप लेते समय आपने किस संस्करण का उपयोग किया था? सुनिश्चित करें कि आप उसी का उपयोग कर रहे हैं
दीपक महाकले

16

यदि आप उबंटू में हैं, तो आपके पास postgresql-clientस्थापित का एक पुराना संस्करण हो सकता है । आपकी त्रुटि संदेश में संस्करणों के आधार पर, समाधान निम्नलिखित होगा:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2

11

जब भी आप PostgreSQL का एक नया संस्करण अपग्रेड या पुनः स्थापित करते हैं, का नवीनतम संस्करण pg_dump स्थापित हो जाता है।

PostgreSQL/bin PostgreSQL के नवीनतम संस्करण के अंतर्गत आपके सिस्टम में कहीं न कहीं एक निर्देशिका होनी चाहिए , जिसे आपने स्थापित किया है (9.2.1 नवीनतम है) और pg_dump वहां से चलने का प्रयास करें ।


10
टिप: इन Terminal.app,find / -name pg_dump -type f 2>/dev/null
क्रेग रिंगर

8

Postgres.app चलाने वालों के लिए :

  1. निम्नलिखित कोड को अपने में जोड़ें .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. टर्मिनल को पुनरारंभ करें।


7

होमब्रे के साथ मैक के लिए। हर्को से डीबी लाने पर मुझे यह समस्या हुई। मैंने इसे ठीक किया है:

brew upgrade postgresql

6

मैक उपयोगकर्ताओं के लिए .profile फ़ाइल के शीर्ष पर रखा जाता है।

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

फिर भागो

. ~/.profile


3

जैसा कि समझाया गया है, यह इसलिए है क्योंकि आपका पोस्टग्रैस्कल पुराने संस्करण में है -> इसे होमब्रे के माध्यम से मैक के लिए अपडेट करें:

brew tap petere/postgresql,

brew install <formula>(जैसे: brew install petere/postgresql/postgresql-9.6)

पुराना पोस्टग्रे निकालें:

brew unlink postgresql

brew link -f postgresql-9.6

यदि कोई त्रुटि होती है, तो प्रत्येक चरण में काढ़ा निर्देश पढ़ना और उसका पालन करना न भूलें।

इसे और देखें: https://github.com/petere/homebrew-postgresql


3

एक वैकल्पिक जवाब जो मुझे नहीं लगता कि किसी और ने कवर किया है।

यदि आपके पास कई पीजी क्लस्टर स्थापित हैं (जैसा कि मैं करता हूं), तो आप उपयोग करने वालों को देख सकते हैं pg_lsclusters

आपको प्रदर्शित सूची से संस्करण और क्लस्टर को देखने में सक्षम होना चाहिए।

फिर, आप यह कर सकते हैं:

pg_dump --cluster=9.6/main books > books.out

जाहिर है, संस्करण और क्लस्टर नाम को अपनी परिस्थितियों के लिए उपयुक्त एक से बदलें, pg_lsclustersजो संस्करण और क्लस्टर को a / से अलग करके लौटा है । यह उस विशिष्ट क्लस्टर को लक्षित करता है जिसे आप चलाना चाहते हैं।


1
यह बहुत उपयोगी है। जैसा कि मुझे भ्रम था कि pg_dumpमेरे एक क्लस्टर पर काम क्यों नहीं हो रहा है। पता चला, यह डिफ़ॉल्ट Postgresql संस्करण का उपयोग कर रहा था, जब मेरा एक क्लस्टर नए संस्करण में अपग्रेड किया गया था। क्लस्टर निर्दिष्ट करना, समस्या हल करना।
एंड्रियस

3

मेरे लिए यह मुद्दा अद्यतन हो रहा psql apt-getथा, इसके बाद भी नए संस्करण हल नहीं कर रहे थे update। निम्नलिखित ने काम किया।

उबंटू

PostgreSQL पैकेज के लिए GPG कुंजी के आयात से शुरू करें।

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

अब रिपॉजिटरी को अपने सिस्टम में जोड़ें।

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Ubuntu पर PostgreSQL स्थापित करें

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/


1
यह आपके कंप्यूटर पर मौजूदा निष्पादन योग्य फ़ाइलों को प्रतिस्थापित नहीं करेगा, इसलिए आपको स्पष्ट रूप से pg_dump के नए संस्करण का उपयोग करने की आवश्यकता होगी, जैसे /usr/lib/postgresql/9.6/bin/pg_dump या एक नया शॉर्टकट बनाना जैसे उदा / usr / bin / pg_dump96
विन्ह

मुझे स्पष्ट रूप से इसे लेने वाले नए का उपयोग करने की आवश्यकता नहीं थी।
राडो

2

यदि आपके पास डॉकटर स्थापित है तो आप कुछ ऐसा कर सकते हैं:

$ docker run postgres:9.2 pg_dump books > books.out

कि इसमें पोस्टग्रेज 9.2 के साथ डॉकटर कंटेनर डाउनलोड होगा, कंटेनर के pg_dumpअंदर चलेगा , और आउटपुट लिखेगा।


2

जवाब मूर्खतापूर्ण लगता है लेकिन अगर आपको उपरोक्त त्रुटि मिलती है और पहले संस्करण के लिए pg_dump चलाना चाहते हैं

./pg_dump servername> out.sql ./ रूट को अनदेखा करता है और वर्तमान निर्देशिका में pg_dump की तलाश करता है


2

मेरे पास एक ही त्रुटि थी और मैंने इसे अपने मामले में हल किया। इसका मतलब है कि आपका पोस्टग्रैस्कल संस्करण 9.2.1 है, लेकिन आपने 9.1.6 की पोस्टग्रैस्कल सेवा शुरू कर दी है।

आप दौड़ेंगे psql postgresतो देखेंगे:

psql (9.2.1, server 9.1.6)

मैंने इस समस्या को हल करने के लिए क्या किया है:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

अब भागो psql postgresऔर तुम्हारे पास होना चाहिए:psql (9.2.1)

आप brew services listअपने पोस्टग्रेट्स की स्थिति देखने के लिए भी दौड़ सकते हैं ।


1

** स्थापित करने के बाद पोस्टग्रेज संस्करण मिलान (9.2) एक प्रतीकात्मक लिंक या नया शॉर्टकट बनाएं

** - '/ usr / bin' पर

syntag is = sudo ln -s [path for use] [new shortcut name]

उदाहरण

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

- कैसे कॉल करें: new_pg_dump -h 192.168.9.88 -U डेटाबेस को पोस्ट करता है



1

यदि डेटाबेस एक अलग मशीन पर स्थापित किया गया है, तो संभवत: इसमें स्थापित pg_dump का सही संस्करण है। इसका मतलब है कि आप SSH के साथ pg_dump कमांड को दूरस्थ रूप से निष्पादित कर सकते हैं: ssh username@dbserver pg_dump books > books.out

आप पासवर्ड रहित निष्पादन के लिए सार्वजनिक कुंजी प्रमाणीकरण का उपयोग कर सकते हैं। इसे प्राप्त करने के लिए कदम:

  1. उत्पन्न करें (यदि अभी तक नहीं किया गया है) ssh-keygen कमांड के साथ कुंजियों की एक जोड़ी।
  2. सार्वजनिक कुंजी को डेटाबेस सर्वर पर कॉपी करें, आमतौर पर ~ / .ssh / अधिकृत_की।
  3. यदि कनेक्शन ssh कमांड के साथ काम करता है तो टेस्ट करें।

1

खैर, मेरे पास एक ही मुद्दा था क्योंकि मेरे पास दो पोस्टग्रेड संस्करण हैं।

बस उचित pg_dump का उपयोग करें और आपको अपने मामले में कुछ भी बदलने की आवश्यकता नहीं है:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out

0

यदि आप Heroku's Postgres.app का उपयोग कर रहे हैं तो pg_dump (अन्य सभी बायनेरिज़ के साथ) में है /Applications/Postgres.app/Contents/MacOS/bin/

तो इस मामले में यह है

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

या

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

बस उन सभी को हड़पने के लिए


0

Macs के लिए, find / -name pg_dump -type f 2>/dev/nullpg_dump का स्थान ढूंढें

मेरे लिए, मेरे पास निम्नलिखित परिणाम हैं:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

यदि आप उपयोग नहीं करना चाहते हैं sudo ln -s new_pg_dump old_pg_dump --force, तो बस उपयोग करें:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppg_dumpअपने टर्मिनल में बदलने के लिए

उदाहरण के लिए:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

इससे मेरा काम बनता है!


0

यहां उपयुक्त पोस्टग्रेज संस्करण डाउनलोड करें:

https://www.postgresql.org/download/

निम्न आदेशों को चलाना सुनिश्चित करें (पोस्टग्रैसेक्लो.ओआर / डाऊनलोड URL आपके उपयोग के लिए विशिष्ट URL उत्पन्न करेगा; नीचे मैं जो प्रयोग करता है वह सेंटो 7 के लिए सिर्फ एक उदाहरण है) sudo के रूप में:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

अब आपका pg_dump संस्करण अपडेट होना चाहिए, pg_dump -V से सत्यापित करें


-6

मैंने अपने फेडोरा 17 इंस्टॉलेशन पर इसी तरह की समस्या का अनुभव किया। यह वही है जो मैंने इस मुद्दे के आसपास पाने के लिए किया था

  • Builtin हटाएं pg_dumpपर /usr/bin/pg_dump(रूट के रूप में: "rm / usr / bin / pg_dump")
  • अब पोस्टग्रेजल इंस्टॉलेशन का एक प्रतीकात्मक लिंक बनाएं

    फिर से जड़ के रूप में ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

यह ट्रिक काम आना चाहिए


9
नोनो, केवल पैकेज प्रबंधित फ़ाइलों को हटाएं नहीं! तो क्या है /usr/(बजाय /usr/local/, /home/या /opt/, जहां चीजों को हटाने आम तौर पर ठीक है) आप वास्तव में - पैकेज प्रबंधक उपयोग करने की आवश्यकता rpmऔर yumया dpkgऔर apt-getया aptitude, distro-निर्भर करता है। या तो rpmअपने PATHवातावरण चर के साथ पैकेज की स्थापना रद्द करें या अपने में परिवर्तन करें.bash_profile ताकि नया संस्करण पहले मिल जाए। यदि आप कुछ पैकेज प्रबंधन के तहत होने के बारे में संदेह में हैं, तो rpm -qf /path/to/file(RPM) या dpkg -S /path/to/file(dpkg) का उपयोग करें
क्रेग रिंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.