Bagaimana menjalankan versi spesifik (8.4, 9.1) dari perintah postgresql pg_ * (mis., Pg_dump)

11

Saya memiliki Postgresql versi 8.4 dan 9.1 yang diinstal. Untuk setiap perintah Postgresql yang diberikan, bagaimana cara menentukan versi spesifik dari perintah yang akan dijalankan? (misalnya, psql, pg_dump, pg_ctlcluster, pg_restore, ...)

Pertanyaan saya termotivasi oleh keinginan untuk melakukan pg_dump dalam persiapan untuk peningkatan dari 8,4 menjadi 9,1, dan saya ingin tahu versi pg_dump mana yang saya jalankan.

Saya menjalankan Ubuntu 10,04 Natty.

Rob Bednark
sumber

Jawaban:

15

Anda berada di Ubuntu dan jelas telah pg_wrappermenginstal Martin Pitt (dilihat dari pg_ctlcluster) yang disediakan oleh paket postgresql-commondan dilengkapi dengan paket-paket standar Debian. Saya menggunakan hal yang sama pada Debian .

Pada sistem Linux, jalankan whichdi shell untuk melihat executable mana yang sebenarnya dipilih:

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dumpsebenarnya adalah symlink ke pg_wrapper, yang secara dinamis memilih versi yang sesuai dari program klien untuk db cluster yang Anda jalankan pg_dump. Saya mengutip halaman manual dari pg_wrapper:

Program ini dijalankan hanya sebagai tautan ke nama-nama yang sesuai dengan program PostgreSQL di / usr / lib / postgresql / versi / bin. Ini menentukan cluster yang dikonfigurasikan dan database untuk pengguna dan memanggil versi yang sesuai dari program yang diinginkan untuk terhubung ke cluster itu dan database, menyediakan setiap opsi yang ditentukan untuk perintah itu.

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

TKI, versi yang tepat harus dipilih secara otomatis - kecuali jika Anda mengacaukan instalasi Anda. Anda selalu dapat menambahkan opsi --clusteruntuk lebih spesifik.

Erwin Brandstetter
sumber
1
Hanya sebuah catatan: ini tidak membantu dengan koneksi jarak jauh. Saya memiliki alat klien 8,3 dan 9,1 diinstal dan defaultnya ke 8,3 untuk beberapa alasan. Saya harus memilih path secara manual di / usr / lib untuk menggunakan versi yang benar. Saya akan berpikir bahwa yang terbaru akan digunakan secara default, tetapi sepertinya tidak.
Sami Kuhmonen
Anda tidak perlu yang terbaru, tetapi yang cocok dengan database Anda. Untuk beberapa tujuan, versi baru pg_dump mungkin merupakan opsi yang lebih baik.
Erwin Brandstetter
Bisakah Anda mengklarifikasi apa yang sebenarnya dibutuhkan dalam file ~ / .postgreslqrc? Keluaran klien saya -> psql (8.4.21, server 9.1.13) PERINGATAN: psql versi 8.4, server versi 9.1. Beberapa fitur psql mungkin tidak berfungsi.
Croydon Dias
Sepertinya itu tidak berhasil untuk saya. Saya membuat dump di server dengan 9.1, dan ketika saya mencoba mengembalikan di server lain dengan 9.1 dan 8.4, ia memberi tahu saya tidak bisa mengenali format file. Juga, tidak ada --clusteropsi baris perintah.
Alexis Wilke
4

saya menggunakan

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
Gavriel
sumber