Versi Postgresql 9.2 pg_dump tidak cocok

146

Saya mencoba untuk membuang database Postgresql menggunakan alat pg_dump .

$ pg_dump books > books.out

Bagaimana saya mendapatkan kesalahan ini.

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

The --ignore-versionpilihan sekarang usang dan benar-benar tidak akan aa solusi untuk masalah saya bahkan jika itu telah bekerja.

Bagaimana cara meningkatkan pg_dump untuk mengatasi masalah ini?

Chris Colla
sumber
langkah sederhana stackoverflow.com/a/42158528/4758119
Deepak Mahakale

Jawaban:

29

Anda dapat menginstal PostgreSQL 9.2.1 di pg_dumpmesin klien atau cukup salin $PGHOMEdari mesin server PostgreSQL ke mesin klien. Perhatikan bahwa tidak perlu initdbcluster baru di mesin klien.

Setelah Anda selesai menginstal perangkat lunak 9.2.1, ingatlah untuk mengedit beberapa variabel lingkungan di .bash_profilefile Anda .

franc
sumber
78

Saya mengalami ini saat menggunakan Heroku di Ubuntu, dan inilah cara saya memperbaikinya:

  1. Tambahkan repositori apt PostgreSQL seperti yang dijelaskan di " Unduhan Linux (Ubuntu) ". (Ada halaman serupa untuk sistem operasi lain.)

  2. Tingkatkan ke versi terbaru (9.3 untuk saya) dengan:

    sudo apt-get install postgresql
    
  3. Buat kembali tautan simbolis /usr/bindengan:

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

    Nomor versi pada /usr/lib/postgresql/...jalur di atas harus cocok dengan server versionnomor pada kesalahan yang Anda terima. Jadi jika kesalahan Anda mengatakan pg_dump: server version: 9.9,, maka tautkan ke /usr/lib/postgresql/9.9/....

Seth
sumber
Ini hanya terjadi ketika Anda meningkatkan PostgreSQL. Saya baru saja menginstal OS baru dan tidak memiliki masalah dengan ini.
Seth
Bagi siapa pun yang bertanya-tanya, solusi ini juga berlaku untuk Ubuntu non-Heroku.
IanBussieres
2
Menurut apa yang telah dikatakan dalam jawaban ini , itu juga ide yang sangat buruk.
Arthur
Jawaban itu merekomendasikan penghapusan perangkat lunak dengan menghapus folder. Di sini kami hanya membuat ulang tautan simbolis.
Seth
2
Sempurna!
Menciptakan
64
  1. Periksa versi pg_dump yang diinstal:

    find / -name pg_dump -type f 2>/dev/null
    
  2. Keluaran saya adalah:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. Ada dua versi yang diinstal. Untuk memperbarui pg_dump dengan versi yang lebih baru:

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

Ini akan membuat symlink ke versi yang lebih baru.

Omer Aslam
sumber
2
Jauh lebih cepat bagi saya untuk menemukan versi yang menggunakanlocate pg_dump
Obromios
1
IMO, Anda tidak boleh menambahkan 2>/dev/nullkarena itu akan membuang aliran ERROR daripada mencetaknya ke konsol. Saya pikir orang ingin melihat kesalahan yang terjadi, kecuali beberapa kasus yang jarang terjadi. Misalnya, dalam kasus saya, ini mengingatkan saya bahwa saya tidak melakukan root sehingga gagal melihat beberapa direktori tempat versi pg_dump yang lebih baru diinstal. Secara umum, jangan hapus kesalahan.
Poutrathor
42

Mac memiliki /usr/bin/pg_dumpperintah bawaan yang digunakan sebagai default.

Dengan menginstal postgresql Anda mendapatkan biner lain di /Library/PostgreSQL/<version>/bin/pg_dump

pengguna2148301
sumber
3
Lokasi akan bervariasi tergantung pada bagaimana PostgreSQL diinstal (penginstal EnterpriseDB, MacPorts, Homebrew, dll), tetapi inti dari jawabannya - bahwa pengguna mungkin telah menginstal versi yang benar - pasti benar.
Craig Ringer
3
Dalam kasus saya, membuka .bash_profile dan menambahkan "export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH" melakukan keajaiban.
Alex Weber
30

Anda cukup mencari pg_dumpdan menggunakan jalur lengkap dalam perintah

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

Sekarang gunakan saja jalur dari versi yang diinginkan dalam perintah

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
Deepak Mahakale
sumber
1
Untuk pengguna CentOS (versi saya 6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima
@ jDub9 versi apa yang Anda gunakan saat membuang sampah? Pastikan Anda menggunakan yang sama
Deepak Mahakale
17

Jika Anda menggunakan Ubuntu, Anda mungkin menginstal versi lama postgresql-client. Berdasarkan versi dalam pesan kesalahan Anda, solusinya adalah sebagai berikut:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
Abe Voelker
sumber
12

Setiap kali Anda mengupgrade atau menginstal ulang versi baru PostgreSQL, versi terbaru pg_dump diinstal.

Harus ada PostgreSQL/bin direktori di suatu tempat di sistem Anda, di bawah versi terbaru PostgreSQL yang telah Anda instal (9.2.1 terbaru) dan coba jalankan pg_dump dari sana.

solaimuruganv.dll
sumber
10
Tip: masuk Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer
9

Untuk Mac dengan Homebrew. Saya mengalami masalah ini saat mengambil db dari Heroku. Saya telah memperbaikinya hanya dengan berjalan:

brew upgrade postgresql
hcarreras
sumber
Terkadang Anda dapat (dengan mudah) mendapatkan versi tertentu darinya juga brew search postgresuntuk melihat semuanya.
rogerdpack
9

Untuk mereka yang menjalankan Postgres.app :

  1. Tambahkan kode berikut ke Anda .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
  2. Mulai ulang terminal.

Andreas
sumber
7

Untuk pengguna mac, letakkan di bagian atas file .profile.

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

lalu lari

. ~/.profile
Andrey Yasinishyn
sumber
4

Seperti yang dijelaskan, ini karena postgresql Anda dalam versi lama -> perbarui Untuk Mac melalui homebrew:

brew tap petere/postgresql,

brew install <formula>(misalnya: brew install petere/postgresql/postgresql-9.6)

Hapus surat pernyataan lama:

brew unlink postgresql

brew link -f postgresql-9.6

Jika terjadi kesalahan, jangan lupa untuk membaca dan mengikuti instruksi pembuatan bir di setiap langkah.

Lihat ini untuk lebih lanjut: https://github.com/petere/homebrew-postgresql

ThangTD
sumber
4

Jawaban alternatif yang menurut saya tidak dibahas orang lain.

Jika Anda menginstal beberapa kluster PG (seperti yang saya lakukan), Anda dapat melihatnya menggunakan pg_lsclusters.

Anda harus dapat melihat versi dan cluster dari daftar yang ditampilkan.

Dari sana, Anda dapat melakukan ini:

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

Jelas, ganti versi dan nama cluster dengan yang sesuai untuk keadaan Anda dari apa yang dikembalikan dengan pg_lsclustersmemisahkan versi dan cluster dengan /. Ini menargetkan cluster tertentu yang ingin Anda jalankan.

ManoDestra
sumber
1
Ini sangat berguna. Karena saya bingung mengapa pg_dumptidak mengerjakan salah satu cluster saya. Ternyata, itu menggunakan versi Postgresql default, ketika salah satu cluster saya ditingkatkan ke versi yang lebih baru. Menentukan cluster, memecahkan masalah.
Andrius
3

Jika Anda menginstal buruh pelabuhan, Anda dapat melakukan sesuatu seperti:

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

Itu akan mengunduh kontainer Docker dengan Postgres 9.2 di dalamnya, berjalan pg_dumpdi dalam kontainer, dan menulis hasilnya.

mzsanford.dll
sumber
3

Jawabannya terdengar konyol tetapi jika Anda mendapatkan kesalahan di atas dan ingin menjalankan pg_dump untuk versi sebelumnya, buka direktori bin postgres dan ketik

./pg_dump namaserver> out.sql ./ mengabaikan root dan mencari pg_dump di direktori saat ini

Joe Root
sumber
3

Bagi saya, masalah memperbarui psql apt-gettidak menyelesaikan versi yang lebih baru, bahkan setelahnya update. Berikut ini berhasil.

Ubuntu

Mulailah dengan mengimpor kunci GPG untuk paket PostgreSQL.

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

Sekarang tambahkan repositori ke sistem Anda.

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

Instal PostgreSQL di Ubuntu

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

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

Glen Thompson
sumber
1
Ini tidak akan menggantikan file yang dapat dieksekusi yang ada di komputer Anda, jadi Anda harus menggunakan versi baru pg_dump secara eksplisit, misalnya /usr/lib/postgresql/9.6/bin/pg_dump atau membuat pintasan baru misalnya / usr / bin / pg_dump96
vinh
Saya tidak harus secara eksplisit menggunakan yang baru.
rado
2

** setelah menginstal versi postgres cocok (9.2) Buat tautan simbolik atau pintasan baru

** - di '/ usr / bin'

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

contoh

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

- cara memanggil: new_pg_dump -h 192.168.9.88 -U database postgres

ช่าง คอม ผู้ ยิ่ง ใหญ่
sumber
2

Coba itu:

export PATH=/usr/local/bin:$PATH
Benjamin Crouzier
sumber
2

Jika database diinstal pada mesin yang berbeda, mungkin database tersebut memiliki versi pg_dump yang diinstal dengan benar. Ini berarti Anda dapat menjalankan perintah pg_dump dari jarak jauh dengan SSH: ssh username@dbserver pg_dump books > books.out

Anda juga dapat menggunakan otentikasi kunci publik untuk eksekusi tanpa kata sandi. Langkah-langkah untuk mencapainya:

  1. Hasilkan (jika belum dilakukan) sepasang kunci dengan perintah ssh-keygen.
  2. Salin kunci publik ke server database, biasanya ~ / .ssh / authorized_keys.
  3. Uji apakah koneksi berfungsi dengan perintah ssh.
tomasz
sumber
2

Nah, saya mengalami masalah yang sama karena saya menginstal dua versi postgress.

Cukup gunakan pg_dump yang tepat dan Anda tidak perlu mengubah apa pun, dalam kasus Anda:

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

Saya memiliki kesalahan yang sama dan inilah cara saya menyelesaikannya dalam kasus saya. Ini berarti versi postgresql Anda adalah 9.2.1 tetapi Anda telah memulai layanan postgresql 9.1.6.

Jika Anda berlari, psql postgresAnda akan melihat:

psql (9.2.1, server 9.1.6)

Apa yang saya lakukan untuk mengatasi masalah ini adalah:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

Sekarang jalankan psql postgresdan Anda harus memiliki:psql (9.2.1)

Anda juga dapat menjalankan brew services listuntuk melihat status postgres Anda.

terang
sumber
1

Jika Anda menggunakan Heroku's Postgres.app, pg_dump (bersama dengan semua binari lainnya) masuk /Applications/Postgres.app/Contents/MacOS/bin/

jadi dalam kasus itu

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

atau

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

untuk mengambil semuanya

mlebarron
sumber
1

Untuk Mac, gunakan find / -name pg_dump -type f 2>/dev/nulltemukan lokasi pg_dump

Bagi saya, saya memiliki hasil sebagai berikut:

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

Jika Anda tidak ingin menggunakan sudo ln -s new_pg_dump old_pg_dump --force, cukup gunakan:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumpuntuk diganti dengan pg_dumpdi terminal Anda

Sebagai contoh:

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

Ini berhasil untuk saya!

zhaoqing
sumber
0

Unduh versi postgres yang sesuai di sini:

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

Pastikan untuk menjalankan perintah berikut (URL postgresql.org/download akan menghasilkan URL spesifik untuk Anda gunakan; yang saya gunakan di bawah ini hanyalah contoh untuk centos 7) sebagai 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

versi pg_dump Anda sekarang harus diperbarui, verifikasi dengan pg_dump -V

Lobi
sumber
0

Pada skenario saya, versi produksi adalah 12, dan versi pengembangan saya adalah 11, memutakhirkan paket postgresql-client-xxsudah cukup untuk menyelesaikan insiden saya.

Halaman web referensi: https://www.postgresql.org/download/linux/ubuntu/

sudo apt-get update && sudo apt-get -y upgrade postgresql-client

Satu hal yang menarik untuk ditunjukkan adalah bahwa setelah peningkatan versi sebelumnya tetap terpasang:

mlazo@mlazo-pc:~$ dpkg -l |grep -i postgresql-client
ii  postgresql-client-11                                             11.8-1.pgdg18.04+1                                  amd64        front-end programs for PostgreSQL 11
ii  postgresql-client-12                                             12.4-1.pgdg18.04+1                                  amd64        front-end programs for PostgreSQL 12

Semoga pengalaman saya bisa membantu seseorang.

Salam pembuka,

Manuel Lazo
sumber
0

Langkah pertama: lihat apakah postgres memiliki repositori dengan binari bawaan untuk versi yang Anda inginkan untuk OS Anda: https://www.postgresql.org/download/

Jika itu tidak berhasil (misalnya jika distro Anda ada tetapi tidak lagi didukung, maka binari yang benar tidak disediakan untuk itu), atau jika Anda hanya ingin langsung atau sumber dan tidak perlu khawatir tentang menambahkan remote repo, dll.

Yang saya lakukan adalah mengunduh sumber mentah postgres untuk versi yang diinginkan.

Untar itu, cd ke dalamnya, bangun ./configure && make, lalu:

postgresql-12.3 $ find . -name pg_dump
./src/bin/pg_dump/pg_dump
$ ./src/bin/pg_dump/pg_dump


unable to load libpg.so.5 # if it says this...
$ find . -name libpg.so.5
$ export LD_LIBRARY_PATH=/your/path/to/the/shared/dir/of/above/file

$ ./src/bin/pg_dump/pg_dump # works now

Sekarang Anda memiliki akses ke versi apa pun yang dibangun di atas kotak Anda. Yang mana saja.

rogerdpack
sumber
-6

Saya mengalami masalah serupa pada instalasi Fedora 17 saya. Inilah yang saya lakukan untuk mengatasi masalah tersebut

  • Hapus bawaan pg_dumpdi /usr/bin/pg_dump(sebagai root: "rm / usr / bin / pg_dump")
  • Sekarang buat tautan simbolis dari instalasi postgresql

    Sekali lagi sebagai root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Itu seharusnya berhasil

Joseph N.
sumber
9
Nonono, jangan hanya menghapus file yang dikelola paket! Jika ada di /usr/(bukan /usr/local/, /home/atau /opt/, di mana menghapus sesuatu umumnya OK) Anda benar - benar perlu menggunakan manajer paket - rpm& yumatau dpkgdan apt-getatau aptitude, tergantung distro. Copot paket dengan rpmatau ubah PATHvariabel lingkungan di Anda .bash_profilesehingga versi yang lebih baru ditemukan terlebih dahulu. Jika Anda ragu tentang sesuatu yang berada di bawah manajemen paket, gunakan rpm -qf /path/to/file(RPM) atau dpkg -S /path/to/file(dpkg)
Craig Ringer