Phiên bản Postgresql 9.2 pg_dump không khớp


141

Tôi đang cố gắng kết xuất cơ sở dữ liệu Postgresql bằng công cụ pg_dump .

$ pg_dump books > books.out

Làm thế nào bao giờ tôi nhận được lỗi này.

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

Các --ignore-versiontùy chọn hiện đang bị phản đối và thực sự sẽ không có aa giải pháp cho vấn đề của tôi ngay cả khi nó đã từng làm việc.

Làm cách nào tôi có thể nâng cấp pg_dump để giải quyết vấn đề này?


Câu trả lời:


27

Bạn có thể cài đặt PostgreQuery 9.2.1 trong pg_dumpmáy khách hoặc chỉ sao chép $PGHOMEtừ máy chủ PostgreQuery sang máy khách. Lưu ý rằng không cần initdbmột cụm mới trong máy khách.

Sau khi bạn cài đặt xong phần mềm 9.2.1, hãy nhớ chỉnh sửa một số biến môi trường trong .bash_profiletệp của bạn .


75

Tôi đã gặp phải điều này khi sử dụng Heroku trên Ubuntu và đây là cách tôi khắc phục nó:

  1. Thêm kho lưu trữ apt PostgreSQL như được mô tả tại " Tải xuống Linux (Ubuntu) ". (Có các trang tương tự cho các hệ điều hành khác.)

  2. Nâng cấp lên phiên bản mới nhất (9.3 cho tôi) với:

    sudo apt-get install postgresql
  3. Tái tạo liên kết tượng trưng trong /usr/bin:

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

    Số phiên bản trong /usr/lib/postgresql/...đường dẫn trên phải khớp với server versionsố trong lỗi bạn nhận được. Vì vậy, nếu lỗi của bạn nói pg_dump: server version: 9.9, sau đó liên kết đến /usr/lib/postgresql/9.9/....


Điều này chỉ xảy ra khi bạn nâng cấp PostgreSQL. Tôi mới cài đặt HĐH mới và không gặp vấn đề gì với việc này.
Seth

Đối với bất cứ ai tự hỏi, giải pháp này cũng áp dụng cho Ubuntu không phải Heroku.
IanBussieres

2
Theo những gì đã được nói trong câu trả lời này , đó cũng là một ý tưởng khá tồi.
Arthur

Câu trả lời đó khuyên bạn nên xóa phần mềm bằng cách xóa một thư mục. Ở đây chúng tôi chỉ tạo lại một liên kết tượng trưng.
Seth

2
Hoàn hảo! Tái tạo liên kết tượng trưng sau khi nâng cấp postgres
Yo Ludke

61
  1. Kiểm tra (các) phiên bản đã cài đặt của pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. Đầu ra của tôi là:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. Có hai phiên bản được cài đặt. Để cập nhật pg_dump với phiên bản mới hơn:

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

Điều này sẽ tạo liên kết tượng trưng cho phiên bản mới hơn.


2
Tôi đã nhanh chóng tìm thấy các phiên bản bằng cách sử dụnglocate pg_dump
Obromios

1
IMO, bạn không nên thêm 2>/dev/nullvì điều đó sẽ loại bỏ luồng ERROR thay vì in nó ra bàn điều khiển. Tôi nghĩ người ta nên thấy bất kỳ lỗi nào xảy ra, ngoại trừ một số trường hợp hiếm gặp. Ví dụ, trong trường hợp của tôi, nó nhắc nhở tôi rằng tôi không root nên không thấy một số thư mục nơi cài đặt phiên bản pg_dump mới hơn. Nói chung, không loại bỏ lỗi.
Poutrathor

40

Máy Mac có /usr/bin/pg_dumplệnh dựng sẵn được sử dụng làm mặc định.

Với cài đặt postgresql, bạn nhận được một nhị phân khác tại /Library/PostgreSQL/<version>/bin/pg_dump


3
Vị trí sẽ thay đổi tùy thuộc vào cách PostgreSQL được cài đặt (trình cài đặt EnterpriseDB, MacPorts, Homebrew, v.v.), nhưng ý chính của câu trả lời - rằng người dùng có thể đã cài đặt đúng phiên bản - chắc chắn là đúng.
Craig Ringer

3
Trong trường hợp của tôi, việc mở .bash_profile và thêm "export PATH = / Ứng dụng / Postgres.app / nội dung / macos / bin: $ PATH" đã làm nên điều kỳ diệu.
Alex Weber

29

Bạn chỉ có thể xác định vị trí pg_dumpvà sử dụng đường dẫn đầy đủ trong lệnh

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

Bây giờ chỉ cần sử dụng đường dẫn của phiên bản mong muốn trong lệnh

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

1
Đối với người dùng CentOS (phiên bản của tôi là 6,9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima

@ jDub9 bạn đã sử dụng phiên bản nào trong khi lấy kết xuất? Hãy chắc chắn rằng bạn đang sử dụng tương tự
Deepak Mahakale

16

Nếu bạn đang dùng Ubuntu, bạn có thể đã postgresql-clientcài đặt phiên bản cũ . Dựa trên các phiên bản trong thông báo lỗi của bạn, giải pháp sẽ như sau:

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

11

Mỗi khi bạn nâng cấp hoặc cài đặt lại phiên bản mới của PostgreSQL, phiên bản mới nhất pg_dump sẽ được cài đặt.

Phải có một PostgreSQL/bin thư mục ở đâu đó trên hệ thống của bạn, dưới phiên bản mới nhất của PostgreSQL mà bạn đã cài đặt (9.2.1 là mới nhất) và thử chạy pg_dump từ đó.


10
Mẹo: trong Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

8

Đối với những người đang chạy Postgres.app :

  1. Thêm mã sau đây vào .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Khởi động lại thiết bị đầu cuối.


7

Dành cho máy Mac có Homebrew. Tôi gặp vấn đề này khi tìm nạp db từ Heroku. Tôi đã sửa nó chỉ chạy:

brew upgrade postgresql

6

Đối với người dùng mac, hãy đặt lên đầu tệp .profile.

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

sau đó chạy

. ~/.profile


3

Như đã giải thích, điều này là do postgresql của bạn ở phiên bản cũ -> cập nhật nó cho Mac thông qua homebrew:

brew tap petere/postgresql,

brew install <formula>(ví dụ brew install petere/postgresql/postgresql-9.6:)

Xóa postgre cũ:

brew unlink postgresql

brew link -f postgresql-9.6

Nếu có lỗi xảy ra, đừng quên đọc và làm theo hướng dẫn pha trong từng bước.

Kiểm tra này để biết thêm: https://github.com/petere/homebrew-postgresql


3

Một câu trả lời khác mà tôi không nghĩ có ai khác đã trả lời.

Nếu bạn có nhiều cụm PG được cài đặt (như tôi làm), thì bạn có thể xem những cụm đó bằng cách sử dụng pg_lsclusters.

Bạn sẽ có thể thấy phiên bản và cụm từ danh sách được hiển thị.

Từ đó, bạn có thể làm điều này:

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

Rõ ràng, thay thế phiên bản và tên cụm bằng tên thích hợp cho trường hợp của bạn với những gì được trả về bằng pg_lsclusterscách tách phiên bản và cụm bằng /. Điều này nhắm mục tiêu cụm cụ thể mà bạn muốn chạy.


1
Điều này rất hữu ích. Vì tôi đã bối rối tại sao pg_dumpkhông làm việc trên một trong các cụm của tôi. Hóa ra, nó đang sử dụng phiên bản Postgresql mặc định, khi một trong các cụm của tôi được nâng cấp lên phiên bản mới hơn. Chỉ định cụm, giải quyết vấn đề.
Andrius

3

Đối với tôi, vấn đề được cập nhật psql apt-getkhông phải là giải quyết các phiên bản mới hơn, ngay cả sau đó update. Sau đây làm việc.

Ubuntu

Bắt đầu với việc nhập khóa GPG cho các gói PostgreSQL.

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

Bây giờ thêm kho lưu trữ vào hệ thống của bạn.

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

Cài đặt PostgreSQL trên Ubuntu

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

https://www.postgresql.org/doad/linux/ubfox/


1
Điều này sẽ không thay thế các tệp thực thi hiện có trên máy tính của bạn, vì vậy bạn sẽ cần sử dụng rõ ràng phiên bản mới của pg_dump, ví dụ /usr/lib/postgresql/9.6/bin/pg_dump hoặc tạo một lối tắt mới, ví dụ / usr / bin / pg_dump96
vinh

Tôi đã không phải sử dụng rõ ràng cái mới mà nó nhặt được.
rado

2

Nếu bạn đã cài đặt docker, bạn có thể làm một cái gì đó như:

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

Điều đó sẽ tải xuống Docker container với Postgres 9.2 trong đó, chạy pg_dumpbên trong container và ghi đầu ra.


2

Câu trả lời nghe có vẻ ngớ ngẩn nhưng nếu bạn gặp lỗi ở trên và muốn chạy pg_dump cho phiên bản trước đó, hãy chuyển đến thư mục bin của postgres và gõ

./pg_dump tên máy chủ> out.sql ./ bỏ qua root và tìm pg_dump trong thư mục hiện tại


2

Tôi đã có lỗi tương tự và đây là cách tôi giải quyết nó trong trường hợp của tôi. Điều này có nghĩa là phiên bản postgresql của bạn là 9.2.1 nhưng bạn đã bắt đầu dịch vụ postgresql là 9.1.6.

Nếu bạn chạy psql postgresbạn sẽ thấy:

psql (9.2.1, server 9.1.6)

Những gì tôi đã làm để giải quyết vấn đề này là:

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

Bây giờ hãy chạy psql postgresvà bạn nên có:psql (9.2.1)

Bạn cũng có thể chạy brew services listđể xem trạng thái của postgres của bạn.


1

** sau khi cài đặt phiên bản postgres phù hợp (9.2) Tạo liên kết tượng trưng hoặc phím tắt mới

** - trên '/ usr / bin'

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

thí dụ

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

- cách gọi: new_pg_dump -h 192.168.9.88 -U cơ sở dữ liệu postgres



1

Nếu cơ sở dữ liệu được cài đặt trên một máy khác, nó có thể đã cài đặt đúng phiên bản pg_dump. Điều này có nghĩa là bạn có thể thực thi lệnh pg_dump từ xa bằng SSH: ssh username@dbserver pg_dump books > books.out

Bạn cũng có thể sử dụng xác thực khóa công khai để thực hiện mật khẩu. Các bước để đạt được điều đó:

  1. Tạo (nếu chưa được thực hiện) một cặp khóa bằng lệnh ssh-keygen.
  2. Sao chép khóa chung vào máy chủ cơ sở dữ liệu, thường là ~ / .ssh / ủy quyền.
  3. Kiểm tra nếu kết nối hoạt động với lệnh ssh.

1

Vâng, tôi đã có vấn đề tương tự như tôi đã cài đặt hai phiên bản postback.

Chỉ cần sử dụng pg_dump thích hợp và bạn không cần thay đổi bất cứ điều gì, trong trường hợp của bạn:

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

0

Nếu bạn đang sử dụng Postgres.app của Heroku, pg_dump (cùng với tất cả các nhị phân khác) nằm trong /Applications/Postgres.app/Contents/MacOS/bin/

vì vậy trong trường hợp đó

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

hoặc là

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

chỉ cần lấy tất cả


0

Đối với máy Mac, sử dụng find / -name pg_dump -type f 2>/dev/nulltìm vị trí của pg_dump

Đối với tôi, tôi có kết quả như sau:

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

Nếu bạn không muốn sử dụng sudo ln -s new_pg_dump old_pg_dump --force, chỉ cần sử dụng:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumpđể thay thế bằng pg_dumptrong thiết bị đầu cuối của bạn

Ví dụ:

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

Nó làm việc cho tôi!


0

Tải về phiên bản postgres thích hợp tại đây:

https://www.postgresql.org/doad/

Đảm bảo chạy các lệnh sau (URL postgresql.org/d Download sẽ tạo URL cụ thể để bạn sử dụng; cái tôi sử dụng dưới đây chỉ là một ví dụ cho centos 7) như 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

phiên bản pg_dump của bạn sẽ được cập nhật, xác minh với pg_dump -V


-6

Tôi gặp vấn đề tương tự khi cài đặt Fedora 17. Đây là những gì tôi đã làm để giải quyết vấn đề

  • Xóa nội dung pg_dumptại /usr/bin/pg_dump(dưới quyền: "rm / usr / bin / pg_dump")
  • Bây giờ tạo một liên kết tượng trưng của cài đặt postgresql

    Lại là root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Điều đó sẽ làm các trick


9
Nonono, không chỉ xóa các tập tin được quản lý gói! Nếu nó nằm trong /usr/(chứ không phải /usr/local/, /home/hoặc /opt/, trong đó việc xóa mọi thứ nói chung là OK), bạn thực sự cần sử dụng trình quản lý gói - rpm& yumhoặc hoặc dpkg, apt-gethoặc aptitudetùy thuộc vào phân phối. Hoặc gỡ cài đặt gói có rpmhoặc thay đổi PATHbiến môi trường của bạn .bash_profileđể phiên bản mới hơn được tìm thấy trước. Nếu bạn nghi ngờ về điều gì đó thuộc quản lý gói, hãy sử dụng rpm -qf /path/to/file(RPM) hoặc dpkg -S /path/to/file(dpkg)
Craig Ringer
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.