Bagaimana saya menyelesaikan "ketidakcocokan versi server" dengan pg_dump ketika saya perlu KEDUA server PostgreSQL diinstal?

13

Saya menginstal dua server PostgreSQL di komputer saya. Satu adalah 9,1 dan yang lainnya 9,3. Saya perlu menginstal kedua server.

Ketika saya menjalankan pg_dump, saya mendapatkan kesalahan versi ketidakcocokan:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

Bagaimana saya bisa menyelesaikannya? (Tidak dapat menghapus versi mana pun - saya memasang 9.1 terlebih dahulu dan 9.3 berbulan-bulan kemudian - saya perlu menginstal kedua server basis data).

Luis Masuelli
sumber
Jalankan versi 9.3 dari pg_dump. Keduanya diinstal, tetapi hanya satu yang default. Lihat update-alternativespath, atau dpkg -Lpaket klien postgresql untuk melihat di mana mereka. Tidak memiliki akses langsung ke kotak Ubuntu untuk menunjukkan kepada Anda sendiri.
Craig Ringer
Tidak bisa. Perintah pg_dump sedang dijalankan dari aplikasi lain.
Luis Masuelli
Anda harus mengubah PATHvariabel lingkungan yang dijalankan aplikasi.
Craig Ringer
Saya memiliki masalah yang sama. Saya harus menginstal melalui repositori apt PostgreSQL: askubuntu.com/a/831293/448857
neoneye

Jawaban:

16

TL; DR : jika kedua instance PostgreSQL dikelola oleh paket Ubuntu (sebagaimana mestinya), cukup gunakan --clusteropsi untuk memilih instance PostgreSQL untuk dicadangkan, dan itu akan secara otomatis memilih versi pg_dump yang sesuai:

pg_dump --cluster 9.1/main [other pg_dump options]

atau

pg_dump --cluster 9.3/main [other pg_dump options].

mainhanyalah nilai default, jalankan pg_lsclustersuntuk melihat nama aktual Anda di Clusterkolom.

Cara kerjanya: sebagaimana diinstal oleh paket Ubuntu, /usr/bin/pg_dumpsebenarnya merupakan tautan lunak ke /usr/share/postgresql-common/pg_wrapper, yang tujuannya tepat untuk memilih instance yang benar dan menjalankan biner yang sesuai. --clustertidak ada dalam perintah stock PostgreSQL, ini adalah tambahan Debian / Ubuntu yang dimaksudkan untuk mengatasi masalah beberapa versi / banyak jalur ini.

Ini adalah sama untuk psql, createdb, createuser, dll sekitar 18 postgres perintah dalam /usr/binsebenarnya dikelola oleh pg_wrapper.

Lihat man pg_wrapper untuk informasi lebih lanjut.

Daniel Vérité
sumber
untuk versi apa / utama? apa yang utama?
Alexander Mills
1
@AlexanderMills: version= versi utama postgresql dan main= nama default cluster. Lihat halaman manual pg_lsclusters dan pg_wrapper.
Daniel Vérité
7

Kamu bisa menggunakan:

sudo find / -name pg_dump

untuk menemukan versi Anda pg_dumpdalam kasus saya:/usr/pgsql-9.6/bin/pg_dump

jadi selanjutnya yang bisa kita lakukan:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

untuk memperbarui ke yang kita butuhkan

edilio
sumber