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.