วิธีรันเวอร์ชันเฉพาะ (8.4, 9.1) ของคำสั่ง postgresql pg_ * (เช่น pg_dump)


11

ฉันติดตั้ง Postgresql เวอร์ชัน 8.4 และ 9.1 แล้ว สำหรับคำสั่ง Postgresql ที่ได้รับฉันจะระบุเวอร์ชันเฉพาะของคำสั่งที่จะรันได้อย่างไร (เช่นpsql, pg_dump, pg_ctlcluster, pg_restore, ... )

คำถามของฉันมีแรงจูงใจโดยต้องการทำ pg_dump เพื่อเตรียมการอัปเกรดจาก 8.4 เป็น 9.1 และฉันต้องการทราบว่าฉันใช้ pg_dump รุ่นใด

ฉันทำงานบน Ubuntu 10.04 Natty

คำตอบ:


15

คุณอยู่บน Ubuntu และเห็นได้ชัดว่ามีการpg_wrapperติดตั้งของ Martin Pitt (ตัดสินจากpg_ctlcluster) ที่ให้บริการโดยแพคเกจpostgresql-commonและมาพร้อมกับแพ็คเกจ Debian มาตรฐาน ผมใช้เหมือนกันใน Debian

บนระบบ Linux ให้รันwhichในเชลล์เพื่อดูว่าไฟล์ใดที่ถูกเลือกได้:

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_dumpเป็น symlink ไปpg_wrapperซึ่งจะเลือกเวอร์ชันที่เหมาะสมของโปรแกรมไคลเอ็นต์สำหรับคลัสเตอร์ db ที่คุณรันpg_dumpด้วย ฉันพูดถึงหน้าคนของpg_wrapper:

โปรแกรมนี้ทำงานเป็นลิงค์ไปยังชื่อที่ตรงกับโปรแกรม PostgreSQL ใน / usr / lib / postgresql / version / bin จะกำหนดคลัสเตอร์และฐานข้อมูลที่กำหนดค่าไว้สำหรับผู้ใช้และเรียกใช้เวอร์ชันที่เหมาะสมของโปรแกรมที่ต้องการเพื่อเชื่อมต่อกับคลัสเตอร์และฐานข้อมูลนั้นโดยจัดหาตัวเลือกที่ระบุให้กับคำสั่งนั้น

   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 ควรเลือกเวอร์ชั่นที่ถูกต้องโดยอัตโนมัติ - เว้นแต่คุณจะติดตั้งอย่างใดอย่างหนึ่ง คุณสามารถเพิ่มตัวเลือก--clusterให้เฉพาะเจาะจงได้ตลอดเวลา


1
เพียงแค่ทราบ: สิ่งนี้ไม่ได้ช่วยในการเชื่อมต่อระยะไกล ฉันติดตั้งเครื่องมือไคลเอนต์ 8.3 และ 9.1 และค่าเริ่มต้นเป็น 8.3 ด้วยเหตุผลบางประการ ฉันต้องเลือกพา ธ ใน / usr / lib ด้วยตนเองเพื่อใช้เวอร์ชั่นที่ถูกต้อง ฉันคิดว่าจะใช้อันใหม่ล่าสุดโดยค่าเริ่มต้น แต่ดูเหมือนจะไม่
Sami Kuhmonen

คุณไม่จำเป็นต้องใช้รุ่นล่าสุด แต่เป็นรุ่นที่ตรงกับฐานข้อมูลของคุณ ในบางกรณี pg_dump รุ่นใหม่อาจเป็นตัวเลือกที่ดีกว่า
Erwin Brandstetter

คุณช่วยอธิบายให้ชัดเจนถึงสิ่งที่จำเป็นต้องใช้ในไฟล์ ~ / .postgreslqrc ได้ไหม? เอาต์พุตไคลเอ็นต์ของฉัน -> psql (8.4.21, เซิร์ฟเวอร์ 9.1.13) คำเตือน: psql เวอร์ชัน 8.4, เซิร์ฟเวอร์เวอร์ชัน 9.1 ฟีเจอร์บางอย่างของ psql อาจไม่ทำงาน
Croydon Dias

ที่ดูเหมือนจะไม่ทำงานสำหรับฉัน ฉันสร้างดัมพ์บนเซิร์ฟเวอร์ที่มี 9.1 และเมื่อฉันพยายามกู้คืนบนเซิร์ฟเวอร์อื่นที่มี 9.1 และ 8.4 มันบอกฉันว่ามันไม่รู้จักรูปแบบไฟล์ นอกจากนี้ยังไม่มี--clusterตัวเลือกบรรทัดคำสั่ง
Alexis Wilke

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.