Несоответствие версии postgresql 9.2 pg_dump


147

Я пытаюсь сбросить базу данных 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опция устарела и действительно не была бы решением моей проблемы, даже если бы она сработала.

Как я могу обновить pg_dump, чтобы решить эту проблему?


Ответы:


29

Вы можете установить PostgreSQL 9.2.1 на pg_dumpклиентском компьютере или просто скопировать $PGHOMEфайл с сервера PostgreSQL на клиентский компьютер. Обратите внимание, что initdbновый кластер на клиентском компьютере не требуется .

После того, как вы закончили установку программного обеспечения 9.2.1, не забудьте отредактировать некоторые переменные среды в вашем .bash_profileфайле.


78

Я столкнулся с этим при использовании Heroku в Ubuntu, и вот как я это исправил:

  1. Добавьте репозиторий PostgreSQL apt, как описано в разделе «Загрузки для 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. Я только что установил новую ОС, и никаких проблем с этим не возникло.
Сет,

Для всех, кому интересно, это решение применимо и к Ubuntu, отличным от Heroku.
IanBussieres 07

2
Судя по тому, что было сказано в этом ответе , это тоже довольно плохая идея.
Артур

В этом ответе рекомендуется удалить программное обеспечение, удалив папку. Здесь мы просто воссоздаем символическую ссылку.
Сет

2
Отлично! Воссоздание символической ссылки после обновления postgres
Йо Людке

64
  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
    

Это создаст символическую ссылку на более новую версию.


2
Мне было намного быстрее найти версии с использованиемlocate pg_dump
Obromios

1
IMO, вы не должны добавлять, 2>/dev/nullтак как это приведет к выбросу потока ERROR, а не на его вывод на консоль. Я думаю, что нужно видеть любые ошибки, за исключением некоторых редких случаев. Например, в моем случае это напоминает мне, что я не был пользователем root, поэтому не видел некоторые каталоги, в которых была установлена ​​более новая версия pg_dump. В общем, не удаляйте ошибки.
Poutrathor

42

На компьютерах Mac есть встроенная /usr/bin/pg_dumpкоманда, которая используется по умолчанию.

После установки postgresql вы получите еще один двоичный файл по адресу /Library/PostgreSQL/<version>/bin/pg_dump


3
Местоположение будет зависеть от того, как был установлен PostgreSQL (установщик EnterpriseDB, MacPorts, Homebrew и т. Д.), Но суть ответа - что у пользователя, вероятно, уже установлена ​​нужная версия - определенно верна.
Craig Ringer

3
В моем случае открытие .bash_profile и добавление «export PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH» сделали чудо.
Alex Weber

30

Вы можете просто найти 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 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Дэвидсон Лима

@ jDub9 какую версию вы использовали при снятии дампа? Убедитесь, что вы используете то же самое
Deepak

17

Если вы используете Ubuntu, возможно, у вас установлена ​​старая версия postgresql-client. В зависимости от версий в вашем сообщении об ошибке решение будет следующим:

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

12

Каждый раз, когда вы обновляете или повторно устанавливаете новую версию PostgreSQL, устанавливается последняя версия pg_dump .

PostgreSQL/bin Где-то в вашей системе должен быть каталог под последней версией PostgreSQL, которую вы установили (9.2.1 является последней), и попробуйте запустить pg_dump оттуда.


10
Подсказка: in Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

9

Для Mac с Homebrew. У меня была эта проблема при получении db из Heroku. Я исправил это только что запущено:

brew upgrade postgresql

Иногда вы можете (легко) получить от него определенные версии, brew search postgresчтобы увидеть их все.
rogerdpack

9

Для тех, кто использует Postgres.app :

  1. Добавьте следующий код в свой .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
  2. Перезагрузите терминал.



7

Для пользователей Mac помещается в начало файла .profile.

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

затем беги

. ~/.profile

4

Как объяснялось, это связано с тем, что ваш postgresql находится в старой версии -> обновите его для Mac через homebrew:

brew tap petere/postgresql,

brew install <formula>(например: brew install petere/postgresql/postgresql-9.6)

Удалите старый postgre:

brew unlink postgresql

brew link -f postgresql-9.6

Если произойдет какая-либо ошибка, не забудьте прочитать и следовать инструкциям по завариванию на каждом этапе.

Проверьте это, чтобы узнать больше: https://github.com/petere/homebrew-postgresql


4

Альтернативный ответ, который, я думаю, никто не покрыл.

Если у вас установлено несколько кластеров PG (как и у меня), вы можете просмотреть те, которые используют pg_lsclusters.

Вы должны увидеть версию и кластер из отображаемого списка.

Оттуда вы можете сделать это:

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

Очевидно, замените версию и имя кластера на соответствующие для ваших обстоятельств из того, что возвращается, pg_lsclustersразделив версию и кластер символом /. Это нацелено на конкретный кластер, с которым вы хотите работать.


1
Это очень полезно. Как я был сбит с толку, почему pg_dumpне работал на одном из моих кластеров. Оказывается, он использовал версию Postgresql по умолчанию, когда один из моих кластеров был обновлен до более новой версии. Указав кластер, решил проблему.
Андрюс

3

Если у вас установлен докер, вы можете сделать что-то вроде:

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

Это загрузит контейнер Docker с Postgres 9.2 в нем, запустится pg_dumpвнутри контейнера и запишет результат.


3

Ответ звучит глупо, но если вы получите указанную выше ошибку и хотите запустить pg_dump для более ранней версии, перейдите в каталог bin postgres и введите

./pg_dump servername> out.sql ./ игнорирует корень и ищет pg_dump в текущем каталоге


3

Для меня проблема заключалась в том, что обновление psql apt-getне разрешало новые версии даже после update. Следующее сработало.

Ubuntu

Начните с импорта ключа 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

** после установки версия 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



2

Если база данных установлена ​​на другом компьютере, вероятно, у нее установлена ​​правильная версия pg_dump. Это означает, что вы можете выполнить команду pg_dump удаленно с помощью SSH: ssh username@dbserver pg_dump books > books.out

Вы также можете использовать аутентификацию с открытым ключом для выполнения без пароля. Шаги для достижения этого:

  1. Сгенерируйте (если еще не сделано) пару ключей с помощью команды ssh-keygen.
  2. Скопируйте открытый ключ на сервер базы данных, обычно это ~ / .ssh / authorized_keys.
  3. Проверьте, работает ли соединение с помощью команды ssh.

2

Ну, у меня была та же проблема, что и у меня установлены две версии postgress.

Просто используйте правильный pg_dump, и в вашем случае ничего менять не нужно:

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

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

Если вы используете Heroku Postgres.app, 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/.

просто схватить их всех


1

Для Mac используйте 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в вашем терминале

Например:

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

Меня устраивает!


0

Загрузите соответствующую версию postgres здесь:

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

Обязательно выполните следующие команды (URL-адрес postgresql.org/download сгенерирует для вас конкретный 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


0

В моем сценарии производственная версия была 12, а моя версия разработки - 11, обновления пакета postgresql-client-xxбыло достаточно, чтобы решить мой инцидент.

Справочная веб-страница: https://www.postgresql.org/download/linux/ubuntu/

sudo apt-get update && sudo apt-get -y upgrade postgresql-client

Следует отметить, что после обновления предыдущая версия осталась установленной:

mlazo@mlazo-pc:~$ dpkg -l |grep -i postgresql-client
ii  postgresql-client-11                                             11.8-1.pgdg18.04+1                                  amd64        front-end programs for PostgreSQL 11
ii  postgresql-client-12                                             12.4-1.pgdg18.04+1                                  amd64        front-end programs for PostgreSQL 12

Надеюсь, мой опыт будет кому-то полезен.

Приветствия,


0

Первый шаг: посмотрите, есть ли у postgres репозиторий с готовыми двоичными файлами для версии, которую вы хотите для своей ОС: https://www.postgresql.org/download/

Если это не сработает (например, если ваш дистрибутив существует, но больше не поддерживается, поэтому для него не предусмотрены правильные двоичные файлы), или если вы просто хотите перейти прямо к источнику и не беспокоиться о добавлении удаленного репо и др.

Что я сделал, так это загрузил исходный код postgres для желаемой версии.

Разверните его, cd в него, соберите его ./configure && make, затем:

postgresql-12.3 $ find . -name pg_dump
./src/bin/pg_dump/pg_dump
$ ./src/bin/pg_dump/pg_dump


unable to load libpg.so.5 # if it says this...
$ find . -name libpg.so.5
$ export LD_LIBRARY_PATH=/your/path/to/the/shared/dir/of/above/file

$ ./src/bin/pg_dump/pg_dump # works now

Теперь у вас есть доступ к любой версии, созданной на вашем компьютере. Который должен быть любым.


-6

У меня возникла аналогичная проблема при установке Fedora 17. Вот что я сделал, чтобы обойти проблему

  • Удалить встроенный pg_dumpв/usr/bin/pg_dump (как root: "rm / usr / bin / pg_dump")
  • Теперь сделаем символическую ссылку на установку postgresql

    Снова как root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Это должно делать свое дело


9
Nonono, не удаляйте просто файлы, управляемые пакетами! Если это в /usr/(а не /usr/local/, /home/или /opt/, где удаление вещи , как правило , в порядке) , вы действительно должны использовать менеджер пакетов - rpmи yumили dpkgи apt-getили aptitude, дистрибутив-зависимость. Либо удалите пакет, rpmлибо измените PATHпеременную среды в вашем .bash_profileтак, чтобы сначала находилась более новая версия. Если вы сомневаетесь в том, что что-то находится под управлением пакетов, используйте rpm -qf /path/to/file(RPM) или dpkg -S /path/to/file(dpkg)
Craig Ringer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.