ketidakcocokan versi pg_dump di Debian

8

Saya menjalankan PostgreSQL di Debian Unstable / Sid. Aku punya versi saat ini (9,1) dari postgresql, postgresql-client, postgresql-client-common(143) diinstal.

Masalah yang saya alami adalah mencoba untuk menjalankan pg_dump. Saya mendapatkan kesalahan ini:

pg_dump: server version: 9.1.9; pg_dump version: 9.0.6
pg_dump: aborting because of server version mismatch

Sepertinya saya tidak tahu cara mendapatkan versi yang lebih baru pg_dump. Tampaknya berasal dari postgresql-client-commonpaket, dan saya sudah mencoba menjalankannya apt-get --reinstall, tetapi itu tidak membuat saya mendapatkan versi pg_dump yang lebih baru.

Bagaimana saya mengatasi ini? Atau di mana saya dapat menemukan paket dengan versi yang lebih baru pg_dump?

supercheetah
sumber
Anda menyadari bahwa ini setara untuk kursus karena Anda menjalankan Debian Sid? Itu tidak stabil. Apa yang which pg_dumpditunjukkan kepada Anda? Hanya untuk mengkonfirmasi bahwa itu sebenarnya versi paket dan bukan yang lain.
slm
Yup, saya memeriksanya. Itu menunjukkan /usr/bin/pg_dump, dan dpkg -S /usr/bin/pg_dumpmemberi saya postgresql-client-common: /usr/bin/pg_dump.
supercheetah
Lihat jawaban saya, lihat apakah itu membantu.
slm

Jawaban:

3

Beberapa pilihan.

Unduh .deb 9.1 dari situs Postgres

Lihatlah halaman ini berjudul: Unduhan Linux (Debian) - PostgreSQL . Anda dapat mengunduh deb .deb yang diperbarui dari situs secara langsung, atau menunjuk kembali ke repositori mereka, dan melakukan perintah seperti ini:

apt-get install postgresql-9.1

Backport Debian

Anda mungkin dapat menemukan versi spesifik di sini, http://backports.debian.org/ .

Gunakan versi generik

Anda dapat mengunduh binary build PostgreSQL dan menginstalnya di direktori home Anda atau /optmisalnya.

Unduh salah satu pre-build untuk penggunaan perusahaan

Saya tidak punya banyak pengalaman dengan ini, tetapi Anda mungkin dapat mengunduh salah satu dari ini mirip dengan versi generik dan menggunakan klien dari instalasi itu, seperti, membuang database Anda.

Paket distribusi lintas

Anda dapat mengunduh paket-paket yang telah dibuat sehingga agnostik distribusi. Saya baru saja mengunduh versi 9.1.9 dan itu termasuk pg_dumpalat.

Perangkat lunak ini disediakan sebagai .rpm atau .deb dan diinstal ke /opt/postgres/9.1. Khususnya pg_dumpalat yang disediakan di sini: /opt/postgres/9.1/bin/pg_dump.

slm
sumber
Versi PostgreSQL tidak terlalu masalah. Ini versi pg_dumpyang lama dan tidak kompatibel. Apakah ada tempat yang bisa saya temukan secara spesifik?
supercheetah
Saya pikir itu dibundel dengan paket-paket ini. Saya hanya akan mengunduh salah satu pre-build untuk versi spesifik dan menggunakan pg_dumpperintah di sana. Mereka tidak harus diinstal, hanya tidak diarsipkan ke direktori. Anda mungkin harus mengatur variabel lingkungan untuk menunjuk ke direktori pustaka tetapi harus cukup mudah.
slm
4

Opsi lain, yang mungkin cocok untuk Anda, adalah menghapus instalasi versi paralel lama:

di debian / ubuntu:

sudo apt-get remove postgresql-8.4
sudo apt-get remove postgresql-client-8.4

Itu mempertahankan versi yang lebih baru (mis. 9.1) hanya menghapus 8,4 klien dan server libs yang lebih lama.

David Thomas
sumber
4

Dalam kasus saya, saya memiliki dua set database, beberapa berjalan pada versi lama Postgresql 8.4 dan lainnya berjalan pada versi 9.1. Apa yang saya lakukan adalah mencari pg_dumpdi mesin Linux menggunakan locateperintah di bawah ini

$ locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/8.4/bin/pg_dump
/usr/lib/postgresql/8.4/bin/pg_dumpall
/usr/lib/postgresql/9.1/bin/pg_dump
/usr/lib/postgresql/9.1/bin/pg_dumpall

Karena defaultnya /usr/bin/pg_dumpadalah untuk Postgresql versi 8.4, saya baru saja menentukan /usr/lib/postgresql/9.1/bin/pg_dumpdari baris perintah ketika membuang dari database 9.1 yang berjalan pada port yang berbeda dan itu berhasil.

$ /usr/lib/postgresql/9.1/bin/pg_dump -p 5434
Erick
sumber
2

Selain jawaban di atas, Anda juga bisa memberi tahu pg_dumpdan perintah lain, versi mana yang akan digunakan melalui clusteropsi. Contohnya,

$pg_dump --cluster 9.1/main

akan menargetkan versi 9.1.

Perhatikan bahwa ini memanfaatkan pg_wrapper, yang datang dengan postgresql-commondan berfungsi di Ubuntu (Debian). Perhatikan juga bahwa cluster ( maindalam contoh) mungkin berbeda dalam pengaturan Anda.

Informasi lebih lanjut tentang pg_wrapperdapat ditemukan dalam jawaban DBA ini .

Dennis
sumber
0

Saya mengalami masalah yang sama hari ini dan jawaban Erick tampaknya paling akurat. Masalahnya kemungkinan bahwa Anda memiliki versi berbeda dari postgresql-client dan pg_dump hanya menggunakan klien tertua.

Anda dapat menyelesaikan ini dengan menggunakan path lengkap seperti yang dia jelaskan, tetapi saya menemukan solusi yang lebih mudah untuk menghapus paket postgresql-client-common (yang menghapus semua klien), kemudian instal ulang postgresql-client-9.3. Ini membuat Anda hanya memiliki pg_dump versi terbaru yang mungkin Anda inginkan.

skylar
sumber