Postgresql 9.2 pg_dump sürümü uyuşmazlığı


141

Ben pg_dump aracını kullanarak bir Postgresql veritabanı dökümü için çalışıyorum .

$ pg_dump books > books.out

Nasıl bu hatayı alıyorum.

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

--ignore-versionSeçeneği artık önerilmemektedir ve gerçekten işe yaradı olsa bile Sorunumla aa çözüm olmaz.

Bu sorunu çözmek için pg_dump dosyasını nasıl yükseltebilirim ?


Yanıtlar:


27

PostgreSQL 9.2.1'i pg_dumpistemci makineye kurabilir veya sadece $PGHOMEPostgreSQL sunucu makinesinden istemci makineye kopyalayabilirsiniz . initdbİstemci makinesinde yeni bir kümeye gerek olmadığını unutmayın .

9.2.1 yazılımını yüklemeyi bitirdikten sonra, .bash_profiledosyanızdaki bazı ortam değişkenlerini düzenlemeyi unutmayın .


75

Ubuntu'da Heroku kullanırken bununla karşılaştım ve işte nasıl düzelttim:

  1. PostgreSQL apt deposunu " Linux siteleri (Ubuntu) " bölümünde açıklandığı gibi ekleyin . (Diğer işletim sistemleri için benzer sayfalar vardır.)

  2. Şununla en son sürüme (benim için 9.3) yükseltin:

    sudo apt-get install postgresql
  3. Şununla sembolik bağlantıyı yeniden oluştur /usr/bin:

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

    /usr/lib/postgresql/...Yukarıdaki yoldaki sürüm numarası, aldığınız hatadaki sayı ile eşleşmelidir server version. Yani hatanız söylerse, pg_dump: server version: 9.9bağlantı kurun /usr/lib/postgresql/9.9/....


Bu yalnızca PostgreSQL'i yükselttiğinizde olur. Ben sadece işletim sisteminin yeni bir kurulum yaptım ve bu konuda herhangi bir sorun yoktu.
Seth

Merak eden herkes için bu çözüm Heroku olmayan Ubuntu için de geçerlidir.
IanBussieres

2
Bu cevapta söylenenlere göre, bu oldukça kötü bir fikir.
Arthur

Bu yanıt, bir klasörü silerek yazılımı kaldırmanızı önerir. Burada sadece sembolik bir bağlantı yaratıyoruz.
Seth

2
Mükemmel! Postgres yükseltmesinden sonra sembolik bağı yeniden
yaratmak

61
  1. Pg_dump'ın kurulu sürümlerini kontrol edin:

    find / -name pg_dump -type f 2>/dev/null
  2. Çıktım şuydu:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. Yüklü iki sürüm var. Pg_dump dosyasını daha yeni sürümle güncellemek için:

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

Bu, yeni sürüme ait bağlantı sembolünü oluşturur.


2
Sürümleri bulmak benim için çok daha locate pg_dump
hızlıydı

1
IMO, eklememelisiniz 2>/dev/nullçünkü bu, ERROR akışını konsola yazdırmak yerine atacaktır. Bence bazı nadir durumlar dışında herhangi bir hata görmek istiyor. Örneğin, benim durumumda, bana kök olmadığını hatırlatıyor, bu nedenle yeni pg_dump sürümünün yüklü olduğu bazı dizinleri göremiyorum. Genel olarak hataları kaldırmayın.
Poutrathor

40

Mac'lerde /usr/bin/pg_dumpvarsayılan olarak kullanılan yerleşik bir komut bulunur.

Postgresql install ile başka bir ikili almak /Library/PostgreSQL/<version>/bin/pg_dump


3
Konum, PostgreSQL'in nasıl kurulduğuna (EnterpriseDB yükleyici, MacPorts, Homebrew, vb.)
Craig Ringer

3
Benim durumumda, .bash_profile dosyasını açıp "export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH" ekleyerek sihir yaptı.
Alex Weber

29

Komutta pg_dumptam yolu bulabilir ve kullanabilirsiniz

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

Şimdi sadece komutta istenen sürümün yolunu kullanın

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

1
CentOS kullanıcıları için (sürümüm 6.9 Final'dir):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima

@ jDub9 Dökümü alırken hangi sürümü kullandınız? Aynı şeyi kullandığınızdan emin olun
Deepak Mahakale

16

Ubuntu kullanıyorsanız, eski bir sürümünüz olabilir postgresql-client. Hata mesajınızdaki sürümlere bağlı olarak, çözüm aşağıdaki gibi olacaktır:

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

11

Her yeni PostgreSQL sürümünü yükselttiğinizde veya yeniden yüklediğinizde, en son sürümü pg_dump yüklenir.

PostgreSQL/bin Sisteminizde bir yerde, yüklediğiniz PostgreSQL'in en son sürümü altında (9.2.1 en son sürüm) bir dizin olmalı ve pg_dump oradan çalıştırmayı deneyin .


10
Tahmin: in Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

8

Postgres.app çalıştıranlar için :

  1. Aşağıdaki kodu .bash_profile :

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Terminali yeniden başlatın.


7

Homebrew'lu Mac'ler için. Bu sorunu Heroku'dan db getirirken yaşadım. Ben sadece çalışan sabit:

brew upgrade postgresql

6

Mac kullanıcıları için .profile dosyasının en üstüne koyun.

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

o zaman koş

. ~/.profile


3

Açıklandığı gibi, bunun nedeni postgresql'inizin eski sürümde olmasıdır -> Mac için homebrew ile güncelleyin:

brew tap petere/postgresql,

brew install <formula>(örneğin brew install petere/postgresql/postgresql-9.6)

Eski postayı kaldır:

brew unlink postgresql

brew link -f postgresql-9.6

Herhangi bir hata oluşursa, her adımda demleme talimatını okumayı ve takip etmeyi unutmayın.

Daha fazla bilgi için buna göz atın: https://github.com/petere/homebrew-postgresql


3

Başkasının kapsadığını düşünmediğim alternatif bir cevap.

Yüklü birden çok PG kümeniz varsa (yaptığım gibi), bunları kullanarak bunları görüntüleyebilirsiniz pg_lsclusters.

Görüntülenen listeden sürümü ve kümeyi görebilmeniz gerekir.

Oradan, bunu yapabilirsiniz:

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

Açıkça, pg_lsclusterssürümü ve kümeyi / ile ayırarak , döndürülen durumdan sürüm ve küme adını durumunuza uygun olanla değiştirin . Bu, karşı koymak istediğiniz belirli kümeyi hedefler.


1
Bu çok faydalı. Kafam karıştığı için neden pg_dumpkümelerimden birinde çalışmadı. Görünüşe göre, kümelerimden biri daha yeni sürüme yükseltildiğinde varsayılan Postgresql sürümünü kullanıyordu. Küme belirtildiğinde sorun çözüldü.
Andrius

3

Benim için sorun güncelleme psql apt-get, daha sonra bile yeni sürümleri çözmüyordu update. Aşağıdaki çalıştı.

Ubuntu

PostgreSQL paketleri için GPG anahtarının içe aktarılmasıyla başlayın.

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

Şimdi havuzu sisteminize ekleyin.

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'ya PostgreSQL yükleyin

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

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


1
Bu, bilgisayarınızdaki mevcut yürütülebilir dosyaların yerini almaz, bu nedenle pg_dump'ın yeni sürümünü (örn. /Usr/lib/postgresql/9.6/bin/pg_dump) açıkça kullanmanız veya örneğin / usr / bin gibi yeni bir kısayol yapmanız gerekir. / pg_dump96
vinh

Aldığım yeni ürünü açıkça kullanmak zorunda değildim.
rado

2

Docker yüklüyse aşağıdaki gibi bir şey yapabilirsiniz:

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

Bu, Postgres 9.2 ile Docker kapsayıcısını indirir, kabın pg_dumpiçinde çalışır ve çıktıyı yazar.


2

Cevap aptalca geliyor, ancak yukarıdaki hatayı alırsanız ve önceki sürüm için pg_dump'ı çalıştırmak istiyorsanız postgres ve türünün bin dizinine gidin

./pg_dump sunucuadı> out.sql ./ kökü yok sayar ve geçerli dizinde pg_dump arar


2

Aynı hatayla karşılaştım ve bu benim durumumda bunu çözdüm. Bu, postgresql sürümünüzün 9.2.1 olduğu, ancak 9.1.6 postgresql hizmetine başladığınız anlamına gelir.

Eğer psql postgreskoşarsan göreceksin:

psql (9.2.1, server 9.1.6)

Bu sorunu çözmek için yaptığım:

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

Şimdi koş psql postgres ve sahip olmalısınız:psql (9.2.1)

brew services listPostgreslerinizin durumunu görmek için de koşabilirsiniz .


1

** kurulum postgres sürümü eşleştikten sonra (9.2) Sembolik bir bağlantı veya yeni bir kısayol oluşturun

** - '/ usr / bin' üzerinde

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

misal

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

- nasıl aranır: new_pg_dump -h 192.168.9.88 -U postgres veritabanı



1

Veritabanı farklı bir makineye yüklüyse, muhtemelen pg_dump'ın doğru sürümüne sahiptir. Bu, pg_dump komutunu SSH ile uzaktan çalıştırabileceğiniz anlamına gelir: ssh username@dbserver pg_dump books > books.out

Parolasız yürütme için ortak anahtar kimlik doğrulamasını da kullanabilirsiniz. Bunu başarmak için adımlar:

  1. Ssh-keygen komutuyla bir çift anahtar oluşturun (henüz yapılmadıysa).
  2. Genel anahtarı veritabanı sunucusuna kopyalayın, genellikle ~ / .ssh / yetkili_anahtarlar.
  3. Bağlantının ssh komutuyla çalışıp çalışmadığını test edin.

1

Yüklü iki postgress sürümü ile aynı sorunu yaşadım.

Sadece uygun pg_dump kullanın ve sizin durumunuzda hiçbir şey değiştirmeniz gerekmez:

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

0

Heroku's Postgres.app kullanıyorsanız pg_dump (diğer tüm ikili dosyalarla birlikte) /Applications/Postgres.app/Contents/MacOS/bin/

yani bu durumda

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

veya

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

hepsini kapmak için


0

Mac'ler için pg_dump find / -name pg_dump -type f 2>/dev/nulldosyasının yerini bulun

Benim için şu sonuçlara sahibim:

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

Kullanmak istemiyorsanız şunları sudo ln -s new_pg_dump old_pg_dump --forcekullanın:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppg_dumpterminalinizde ile değiştirmek

Örneğin:

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

Benim için çalışıyor!


0

Uygun postgres sürümünü buradan indirin:

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

Sudo olarak aşağıdaki komutları (postgresql.org/download URL'yi kullanmanız için özel URL oluşturur) çalıştırdığınızdan emin olun; aşağıda kullandığım sudo için centos 7 için sadece bir örnektir):

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 sürümünüz şimdi güncellenmelidir, pg_dump -V ile doğrulayın


-6

Fedora 17 kurulumumda da benzer bir sorun yaşadım. Bu sorunu çözmek için yaptığım şey bu

  • Yerleşiği sil pg_dumpat /usr/bin/pg_dump(root olarak: "rm / usr / bin / pg_dump")
  • Şimdi postgresql kurulumunun sembolik bir bağlantısını yapın

    Yine kök olarak ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Hile yapmalı


9
Nonono, sadece paket yönetilen dosyaları silmeyin! İçinde ise /usr/(ziyade /usr/local/, /home/veya /opt/şeyleri silme genellikle Tamam olduğu,) sen gerçekten paket yöneticisini kullanmak gerekir - rpm& yumya dpkgve apt-getya aptitude, dağıtıma-bağlı. Önce yeni sürümün bulunması için paketinizi kaldırın rpmya da PATHortam değişkeninizle değiştirin .bash_profile. Bir şeyin paket yönetimi, kullanımı altında olma konusunda şüphe ediyorsanız rpm -qf /path/to/file(RPM) veya dpkg -S /path/to/file(dpkg)
Craig Zil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.