Cách chạy phiên bản cụ thể (8.4, 9.1) của lệnh pg_ * postgresql (ví dụ: pg_dump)


11

Tôi đã cài đặt phiên bản Postgresql 8.4 và 9.1. Đối với bất kỳ lệnh Postgresql nào, làm cách nào để chỉ định một phiên bản cụ thể của lệnh sẽ chạy? (ví dụ psql, pg_dump, pg_ctlcluster, pg_restore, ...)

Câu hỏi của tôi được thúc đẩy bằng cách muốn thực hiện pg_dump để chuẩn bị nâng cấp từ 8.4 lên 9.1 và tôi muốn biết phiên bản pg_dump nào tôi đang chạy.

Tôi đang chạy trên Ubuntu 10.04 Natty.

Câu trả lời:


15

Bạn đang sử dụng Ubuntu và rõ ràng đã pg_wrappercài đặt Martin Pitt (đánh giá từ pg_ctlcluster) được cung cấp bởi gói postgresql-commonvà đi kèm với các gói Debian tiêu chuẩn. Tôi sử dụng tương tự trên Debian .

Trên hệ thống Linux, hãy chạy whichtrong trình bao để xem thực thi nào được chọn:

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_dumpthực sự là một liên kết tượng trưng pg_wrapper, tự động chọn phiên bản thích hợp của chương trình máy khách cho cụm db mà bạn chạy pg_dumpcùng. Tôi trích dẫn trang người đàn ông của pg_wrapper:

Chương trình này chỉ được chạy dưới dạng liên kết đến các tên tương ứng với các chương trình PostgreSQL trong / usr / lib / postgresql / version / bin. Nó xác định cụm và cơ sở dữ liệu được cấu hình cho người dùng và gọi phiên bản thích hợp của chương trình mong muốn để kết nối với cụm và cơ sở dữ liệu đó, cung cấp bất kỳ tùy chọn đã chỉ định nào cho lệnh đó.

   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.

IOW, phiên bản phù hợp nên được chọn tự động - trừ khi bạn làm hỏng cài đặt của mình bằng cách nào đó. Bạn luôn có thể thêm tùy chọn --clusterđể được cụ thể.


1
Chỉ cần một lưu ý: điều này không giúp với các kết nối từ xa. Tôi có các công cụ máy khách 8.3 và 9.1 được cài đặt và nó mặc định là 8.3 vì một số lý do. Tôi phải chọn thủ công đường dẫn trong / usr / lib để sử dụng phiên bản chính xác. Tôi đã nghĩ rằng cái mới nhất sẽ được sử dụng theo mặc định, nhưng dường như không.
Sami Kuhmonen

Bạn không cần cái mới nhất, nhưng cái cần khớp với cơ sở dữ liệu của bạn. Đối với một số mục đích, phiên bản mới của pg_dump có thể là lựa chọn tốt hơn.
Erwin Brandstetter

Bạn có thể vui lòng làm rõ chính xác những gì cần phải đi trong tệp ~ / .postgreslqrc không? Đầu ra máy khách của tôi -> psql (8.4,21, máy chủ 9.1.13) CẢNH BÁO: phiên bản psql 8.4, phiên bản máy chủ 9.1. Một số tính năng psql có thể không hoạt động.
Croydon Dias

Điều đó dường như không làm việc cho tôi. Tôi đã tạo một kết xuất trên một máy chủ với 9.1 và khi tôi cố gắng khôi phục trên một máy chủ khác với 9.1 và 8.4, nó cho tôi biết nó không thể nhận ra định dạng tệp. Ngoài ra, không có --clustertùy chọn dòng lệnh.
Alexis Wilke

3

tôi sử dụng

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.