ฉันจะแก้ปัญหา“ เซิร์ฟเวอร์เวอร์ชันไม่ตรงกัน” ด้วย pg_dump เมื่อฉันต้องติดตั้งเซิร์ฟเวอร์ทั้ง PostgreSQL ได้อย่างไร


13

ฉันติดตั้งเซิร์ฟเวอร์ PostgreSQL สองเครื่องในคอมพิวเตอร์ของฉัน อันหนึ่งคือ 9.1 และอีกอันคือ 9.3 ฉันต้องการเซิร์ฟเวอร์ทั้งสองตัวที่ติดตั้งไว้

เมื่อฉันรัน pg_dump แต่ฉันได้รับข้อผิดพลาดของรุ่นที่ไม่ตรงกัน:

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

ฉันจะแก้มันได้อย่างไร (ไม่สามารถถอนการติดตั้งทั้งสองเวอร์ชัน - ฉันติดตั้ง 9.1 ก่อนและ 9.3 หลายเดือนต่อมา - ฉันต้องติดตั้งเซิร์ฟเวอร์ฐานข้อมูลทั้งสอง )


อย่างชัดเจนเรียกใช้รุ่น 9.3 pg_dumpของ ทั้งสองได้รับการติดตั้ง แต่มีเพียงอันเดียวคือค่าเริ่มต้น ดูพาupdate-alternativesธ หรือdpkg -Lแพ็กเกจไคลเอ็นต์ postgresql เพื่อดูว่าพวกเขาอยู่ที่ไหน ไม่มีสิทธิ์เข้าถึงกล่อง Ubuntu เพื่อแสดงตัวเองในทันที
Craig Ringer

ไม่ได้. คำสั่ง pg_dump กำลังถูกเรียกใช้จากแอปพลิเคชันอื่น
Luis Masuelli

คุณจะต้องเปลี่ยนPATHตัวแปรสภาพแวดล้อมที่แอพทำงานด้วย
Craig Ringer

ผมมีปัญหาเดียวกัน. ฉันต้องติดตั้งผ่านที่เก็บ apt PostgreSQL: askubuntu.com/a/831293/448857
neoneye

คำตอบ:


16

TL; DR : หากทั้งสองอินสแตนซ์ PostgreSQL ได้รับการจัดการโดยแพ็คเกจ Ubuntu (เท่าที่ควร) ให้ใช้--clusterตัวเลือกเพื่อเลือกอินสแตนซ์ PostgreSQL เพื่อสำรองข้อมูลและจะเลือกรุ่นที่สอดคล้องกันของ pg_dump โดยอัตโนมัติ:

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

หรือ

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

mainเป็นเพียงค่าเริ่มต้นเรียกใช้pg_lsclustersเพื่อดูชื่อจริงของคุณในClusterคอลัมน์

วิธีการทำงาน: ตามที่ติดตั้งโดยแพ็คเกจของ Ubuntu /usr/bin/pg_dumpเป็นซอฟต์ลิงค์/usr/share/postgresql-common/pg_wrapperซึ่งมีวัตถุประสงค์เพื่อเลือกอินสแตนซ์ที่ถูกต้องและเรียกใช้ไบนารีที่เกี่ยวข้อง --clusterไม่มีอยู่ในคำสั่ง PostgreSQL ของหุ้นมันเป็นการเพิ่ม Debian / Ubuntu ที่มีไว้เพื่อแก้ไขปัญหาหลาย ๆ รุ่น / หลายเส้นทาง

นี้เป็นเหมือนกันสำหรับpsql, createdb, createuserฯลฯ ประมาณ 18 คำสั่ง postgres ในมีการจัดการจริงโดย/usr/binpg_wrapper

ดูman pg_wrapperสำหรับข้อมูลเพิ่มเติม


รุ่น / main มีไว้เพื่ออะไร หลักคืออะไร
Alexander Mills

1
@AlexanderMills: version= เวอร์ชันหลักของ postgresql และmain= ชื่อเริ่มต้นของคลัสเตอร์ ดู manpages ของ pg_lsclusters และ pg_wrapper
Daniel Vérité

7

คุณสามารถใช้ได้:

sudo find / -name pg_dump

เพื่อค้นหาเวอร์ชันของคุณpg_dumpในกรณีของฉัน:/usr/pgsql-9.6/bin/pg_dump

ดังนั้นต่อไปเราสามารถทำ:

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

เพื่ออัปเดตเป็นสิ่งที่เราต้องการ

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