Postgresql 9.2 pg_dump เวอร์ชันไม่ตรงกัน


141

ฉันพยายามดัมพ์ฐานข้อมูล Postgresql โดยใช้เครื่องมือpg_dump

$ pg_dump books > books.out

ฉันจะได้รับข้อผิดพลาดนี้ได้อย่างไร

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

--ignore-versionตัวเลือกที่จะเลิกตอนนี้และมันจะไม่เป็นวิธีการแก้ปัญหา AA กับปัญหาของฉันถึงแม้ว่ามันจะได้ทำงาน

ฉันจะอัพเกรดpg_dumpเพื่อแก้ไขปัญหานี้ได้อย่างไร


ขั้นตอนง่าย ๆstackoverflow.com/a/42158528/4758119
Deepak Mahakale

คำตอบ:


27

คุณสามารถติดตั้ง PostgreSQL 9.2.1 ในpg_dumpเครื่องไคลเอนต์หรือเพียงคัดลอก$PGHOMEจากเครื่องเซิร์ฟเวอร์ PostgreSQL ไปยังเครื่องไคลเอนต์ โปรดทราบว่าไม่จำเป็นต้องinitdbมีคลัสเตอร์ใหม่ในเครื่องไคลเอนต์

หลังจากคุณติดตั้งซอฟต์แวร์ 9.2.1 เสร็จแล้วอย่าลืมแก้ไขตัวแปรสภาพแวดล้อมบางอย่างใน.bash_profileไฟล์ของคุณ


75

ฉันพบสิ่งนี้ในขณะที่ใช้ Heroku บน Ubuntu และนี่คือวิธีแก้ไข:

  1. เพิ่มคลังเก็บ apt PostgreSQL ตามที่อธิบายไว้ใน "การดาวน์โหลด Linux (Ubuntu) " (มีหน้าคล้ายกันสำหรับระบบปฏิบัติการอื่น)

  2. อัปเกรดเป็นเวอร์ชั่นล่าสุด (9.3 สำหรับฉัน) ด้วย:

    sudo apt-get install postgresql
  3. สร้างลิงก์สัญลักษณ์ขึ้นใหม่/usr/binด้วย:

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force

    หมายเลขรุ่นใน/usr/lib/postgresql/...เส้นทางด้านบนควรตรงกับserver versionหมายเลขในข้อผิดพลาดที่คุณได้รับ ดังนั้นหากผิดพลาดของคุณพูดแล้วเชื่อมโยงไปยังpg_dump: server version: 9.9/usr/lib/postgresql/9.9/...


สิ่งนี้จะเกิดขึ้นเมื่อคุณอัพเกรด PostgreSQL ฉันเพิ่งติดตั้งระบบปฏิบัติการใหม่และไม่มีปัญหาใด ๆ กับสิ่งนี้
เซท

สำหรับทุกคนที่สงสัยวิธีนี้ใช้ได้กับผู้ที่ไม่ใช่ Heroku Ubuntu เช่นกัน
IanBussieres

2
ตามที่กล่าวไว้ในคำตอบนี้มันเป็นความคิดที่ไม่ดีเช่นกัน
อาเธอร์

คำตอบนั้นแนะนำให้ลบซอฟต์แวร์ด้วยการลบโฟลเดอร์ ที่นี่เราเพิ่งสร้างลิงค์สัญลักษณ์
เซท

2
ที่สมบูรณ์แบบ! สร้างลิงก์สัญลักษณ์ใหม่อีกครั้งหลังจากการอัปเกรด postgres
Yo Ludke

61
  1. ตรวจสอบเวอร์ชั่นที่ติดตั้งของ pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. ผลลัพธ์ของฉันคือ:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. มีการติดตั้งสองรุ่น หากต้องการอัปเดต pg_dump ด้วยเวอร์ชันที่ใหม่กว่า:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

สิ่งนี้จะสร้าง symlink ให้เป็นเวอร์ชั่นที่ใหม่กว่า


2
มันเร็วกว่าที่ฉันจะหารุ่นที่ใช้locate pg_dump
Obromios

1
IMO คุณไม่ควรเพิ่ม2>/dev/nullเนื่องจากจะทำให้สตรีมข้อผิดพลาดออกไปแทนที่จะพิมพ์ลงในคอนโซล ฉันคิดว่าควรต้องการเห็นข้อผิดพลาดที่เกิดขึ้นยกเว้นบางกรณีที่หายาก ตัวอย่างเช่นในกรณีของฉันมันเตือนฉันว่าฉันไม่ได้เป็นรูทดังนั้นจึงไม่สามารถดูบางไดเรกทอรีที่ติดตั้งเวอร์ชัน pg_dump ที่ใหม่กว่า โดยทั่วไปแล้วอย่าลบข้อผิดพลาด
Poutrathor

40

Mac มี/usr/bin/pg_dumpคำสั่งbuiltin ที่ใช้เป็นค่าเริ่มต้น

ด้วยการติดตั้ง postgresql คุณจะได้รับไบนารีอีกตัวที่ /Library/PostgreSQL/<version>/bin/pg_dump


3
ตำแหน่งจะแตกต่างกันไปขึ้นอยู่กับว่ามีการติดตั้ง PostgreSQL ไว้อย่างไร (ตัวติดตั้ง EnterpriseDB, MacPort, Homebrew ฯลฯ ) แต่ส่วนสำคัญของคำตอบ - ที่ผู้ใช้อาจติดตั้งรุ่นที่ถูกต้องแล้ว - ถูกต้องอย่างแน่นอน
Craig Ringer

3
ในกรณีของฉันการเปิด. bash_profile และการเพิ่ม "export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH" ทำให้เวทมนต์
Alex Weber

29

คุณสามารถค้นหาpg_dumpและใช้เส้นทางแบบเต็มในคำสั่ง

locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

ตอนนี้เพียงใช้พา ธ ของเวอร์ชันที่ต้องการในคำสั่ง

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out

1
สำหรับผู้ใช้ CentOS (รุ่นของฉันคือ 6.9 รอบชิงชนะเลิศ):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima

@ jDub9 คุณใช้เวอร์ชันใดขณะถ่ายโอนข้อมูล ตรวจสอบให้แน่ใจว่าคุณใช้สิ่งเดียวกัน
Deepak Mahakale

16

หากคุณใช้ Ubuntu คุณอาจpostgresql-clientติดตั้งรุ่นเก่า ขึ้นอยู่กับรุ่นในข้อความแสดงข้อผิดพลาดของคุณการแก้ไขจะเป็นดังต่อไปนี้:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2

11

ทุกครั้งที่คุณอัพเกรดหรือติดตั้ง PostgreSQL เวอร์ชันใหม่ pg_dump จะมีการติดตั้งเวอร์ชันล่าสุด

จะต้องมี PostgreSQL/bin ไดเรกทอรีบางแห่งในระบบของคุณภายใต้ PostgreSQL เวอร์ชันล่าสุดที่คุณติดตั้ง (9.2.1 เป็นเวอร์ชันล่าสุด) และลองเรียกใช้ pg_dump จากภายใน


10
เคล็ดลับ: ในTerminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

8

สำหรับผู้ที่ใช้งานPostgres.app :

  1. เพิ่มรหัสต่อไปนี้ของคุณ.bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. รีสตาร์ทเทอร์มินัล


7

สำหรับ Mac กับ Homebrew ฉันมีปัญหานี้เมื่อดึง db จาก Heroku ฉันได้แก้ไขแล้วเพิ่งรัน:

brew upgrade postgresql

6

สำหรับผู้ใช้ mac ให้อยู่ด้านบนของไฟล์. profile

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

จากนั้นเรียกใช้

. ~/.profile


3

ตามที่อธิบายไว้นี่เป็นเพราะ postgresql ของคุณเป็นรุ่นเก่า -> อัปเดตสำหรับ Mac ผ่าน homebrew:

brew tap petere/postgresql,

brew install <formula>(เช่น: brew install petere/postgresql/postgresql-9.6)

ลบโพสต์เก่า:

brew unlink postgresql

brew link -f postgresql-9.6

หากมีข้อผิดพลาดเกิดขึ้นอย่าลืมอ่านและปฏิบัติตามขั้นตอนการชงในแต่ละขั้นตอน

ลองดูสิ่งนี้เพิ่มเติมได้ที่: https://github.com/petere/homebrew-postgresql


3

คำตอบอื่นที่ฉันไม่คิดว่าจะมีใครพูดถึง

หากคุณมีกลุ่ม PG ติดตั้งหลาย (ที่ผมทำ) pg_lsclustersแล้วคุณสามารถดูผู้ที่ใช้

คุณควรจะเห็นรุ่นและคลัสเตอร์จากรายการที่แสดง

จากนั้นคุณสามารถทำสิ่งนี้:

pg_dump --cluster=9.6/main books > books.out

แน่นอนแทนที่เวอร์ชันและชื่อคลัสเตอร์ด้วยชื่อที่เหมาะสมสำหรับสถานการณ์ของคุณจากสิ่งที่ส่งคืนโดยpg_lsclustersการแยกเวอร์ชันและคลัสเตอร์ด้วย / เป้าหมายนี้เป็นคลัสเตอร์เฉพาะที่คุณต้องการเรียกใช้


1
มันมีประโยชน์มาก ในขณะที่ฉันสับสนว่าทำไมpg_dumpไม่ทำงานกับหนึ่งในกลุ่มของฉัน กลับกลายเป็นว่ากำลังใช้รุ่น Postgresql ที่เป็นค่าเริ่มต้นเมื่อหนึ่งในกลุ่มของฉันได้รับการอัพเกรดเป็นรุ่นที่ใหม่กว่า การระบุคลัสเตอร์แก้ไขปัญหา
Andrius

3

สำหรับผมประเด็นสำคัญคือการปรับปรุงไม่ได้การแก้ไขรุ่นใหม่แม้หลังจากที่psql apt-get updateทำงานต่อไปนี้

อูบุนตู

เริ่มต้นด้วยการนำเข้าคีย์ GPG สำหรับแพ็คเกจ PostgreSQL

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

ตอนนี้เพิ่มที่เก็บไปยังระบบของคุณ

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

ติดตั้ง PostgreSQL บน Ubuntu

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/


1
สิ่งนี้จะไม่แทนที่ไฟล์ปฏิบัติการที่มีอยู่ในคอมพิวเตอร์ของคุณดังนั้นคุณจะต้องใช้ pg_dump รุ่นใหม่อย่างชัดเจนเช่น /usr/lib/postgresql/9.6/bin/pg_dump หรือสร้างทางลัดใหม่เช่น / usr / bin / pg_dump96
Vinh

ฉันไม่จำเป็นต้องใช้ใหม่อย่างชัดเจนมันหยิบมันขึ้นมา
รัศมี

2

หากคุณติดตั้งนักเทียบท่าคุณสามารถทำสิ่งต่อไปนี้:

$ docker run postgres:9.2 pg_dump books > books.out

ที่จะดาวน์โหลดคอนเทนเนอร์ Docker ที่มี Postgres 9.2 อยู่pg_dumpภายในเรียกใช้ภายในคอนเทนเนอร์และเขียนผลลัพธ์


2

คำตอบฟังดูงี่เง่า แต่ถ้าคุณได้รับข้อผิดพลาดข้างต้นและต้องการเรียกใช้ pg_dump สำหรับเวอร์ชันก่อนหน้าให้ไปที่ไดเรกทอรี bin ของ postgres และประเภท

./pg_dump servername> out.sql ./ จะข้ามรูทและมองหา pg_dump ในไดเรกทอรีปัจจุบัน


2

ฉันมีข้อผิดพลาดเดียวกันและนี่คือวิธีที่ฉันจะแก้ไขในกรณีของฉัน ซึ่งหมายความว่าเวอร์ชัน postgresql ของคุณคือ 9.2.1 แต่คุณได้เริ่มให้บริการ postgresql ที่ 9.1.6

หากคุณเรียกใช้psql postgresคุณจะเห็น:

psql (9.2.1, server 9.1.6)

สิ่งที่ฉันทำเพื่อแก้ไขปัญหานี้คือ:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

ตอนนี้ทำงานpsql postgresและคุณควรจะมี:psql (9.2.1)

นอกจากนี้คุณยังสามารถเรียกใช้brew services listเพื่อดูสถานะของ postgres ของคุณ


1

** หลังจากติดตั้งเวอร์ชัน postgres ตรงกัน (9.2) สร้างลิงค์สัญลักษณ์หรือทางลัดใหม่

** - บน '/ usr / bin'

syntag is = sudo ln -s [path for use] [new shortcut name]

ตัวอย่าง

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

- วิธีการโทร: new_pg_dump -h 192.168.9.88 -U ฐานข้อมูล postgres



1

หากติดตั้งฐานข้อมูลบนเครื่องอื่นอาจมีการติดตั้ง pg_dump เวอร์ชันที่ถูกต้อง ซึ่งหมายความว่าคุณสามารถดำเนินการคำสั่ง pg_dump จากระยะไกลด้วย SSH: ssh username@dbserver pg_dump books > books.out

นอกจากนี้คุณยังสามารถใช้การรับรองความถูกต้องของกุญแจสาธารณะสำหรับการดำเนินการด้วยรหัสผ่าน ขั้นตอนในการบรรลุเป้าหมาย:

  1. สร้าง (ถ้ายังไม่ได้ทำ) คู่ของคีย์ด้วยคำสั่ง ssh-keygen
  2. คัดลอกพับลิกคีย์ไปยังเซิร์ฟเวอร์ฐานข้อมูลโดยทั่วไปคือ ~ / .ssh / authorized_keys
  3. ทดสอบว่าการเชื่อมต่อทำงานกับคำสั่ง ssh หรือไม่

1

ฉันมีปัญหาเดียวกันกับที่ฉันติดตั้ง postgress สองเวอร์ชัน

เพียงใช้ pg_dump ที่เหมาะสมและคุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในกรณีของคุณ:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out

0

หากคุณกำลังใช้ Postgres.app ของ Heroku pg_dump (รวมถึงไบนารีอื่น ๆ ทั้งหมด) อยู่ /Applications/Postgres.app/Contents/MacOS/bin/

ดังนั้นในกรณีของมัน

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

หรือ

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

ที่จะเพียงแค่คว้าพวกเขาทั้งหมด


0

สำหรับ macs ให้ใช้find / -name pg_dump -type f 2>/dev/nullหาตำแหน่งของ pg_dump

สำหรับฉันฉันมีผลลัพธ์ต่อไปนี้:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

หากคุณไม่ต้องการใช้sudo ln -s new_pg_dump old_pg_dump --forceเพียงใช้:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumpเพื่อแทนที่ด้วยpg_dumpใน terminal ของคุณ

ตัวอย่างเช่น:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

มันใช้งานได้สำหรับฉัน!


0

ดาวน์โหลดรุ่น postgres ที่เหมาะสมได้ที่นี่:

https://www.postgresql.org/download/

อย่าลืมรันคำสั่งต่อไปนี้ (postgresql.org/download URL จะสร้าง URL เฉพาะให้คุณใช้คำสั่งที่ฉันใช้ด้านล่างเป็นเพียงตัวอย่างสำหรับ centos 7) เป็น sudo:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

ตอนนี้เวอร์ชัน pg_dump ของคุณควรได้รับการอัปเดตตรวจสอบด้วย pg_dump -V


-6

ฉันประสบปัญหาคล้ายกันในการติดตั้ง Fedora 17 นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหา

  • ลบ builtin pg_dumpที่/usr/bin/pg_dump(เป็น root: "rm / usr / bin / pg_dump")
  • ตอนนี้สร้างลิงก์สัญลักษณ์ของการติดตั้ง postgresql

    เป็นรากอีกครั้ง ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

นั่นควรทำเคล็ดลับ


9
ไม่ใช่, ไม่เพียง แต่ลบไฟล์ที่มีการจัดการแพ็คเกจ! ถ้ามันอยู่ใน/usr/(แทนที่จะ/usr/local/, /home/หรือ/opt/ที่ลบสิ่งที่โดยทั่วไป OK) คุณจริงๆต้องใช้ผู้จัดการแพคเกจ - rpmและyumหรือdpkgและapt-getหรือaptitude, distro ขึ้นอยู่ ถอนการติดตั้งแพ็กเกจด้วยrpmหรือเปลี่ยนแปลงPATHตัวแปรสภาพแวดล้อมของคุณ.bash_profileเพื่อให้พบเวอร์ชันที่ใหม่กว่าก่อน หากคุณมีข้อสงสัยเกี่ยวกับสิ่งที่อยู่ภายใต้การจัดการแพ็กเกจให้ใช้rpm -qf /path/to/file(RPM) หรือdpkg -S /path/to/file(dpkg)
Craig Ringer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.