Несоответствие версий Postgresql 9.2 pg_dump

118

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

Теги:
backup
postgresql-9.2
pg-dump

21 ответ

24
Лучший ответ

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

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

59

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

  • Добавить репозиторий PostgreSQL apt, как описано в разделе Загрузка Linux (Ubuntu) ". (Аналогичные страницы для других операционных систем.)

  • Перейдите к последней версии (9.3 для меня) с помощью

    sudo apt-get install postgresql
    
  • Создайте символическую ссылку в /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/....

  • 0
    Это происходит только при обновлении PostgreSQL. Я только что сделал новую установку ОС и не было никаких проблем с этим.
  • 0
    Для всех, кто интересуется, это решение применимо и к не-Heroku Ubuntu.
Показать ещё 9 комментариев
44
  • Проверьте установленную версию pg_dump:

    find / -name pg_dump -type f 2>/dev/null
    
  • Мой результат:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  • Установлены две версии. Чтобы обновить pg_dump с более новой версией:

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

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

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

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

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

  • 3
    Расположение будет зависеть от того, как был установлен PostgreSQL (установщик EnterpriseDB, MacPorts, Homebrew и т. Д.), Но суть ответа - что пользователь, вероятно, уже установил правильную версию - определенно верна.
  • 3
    В моем случае открытие .bash_profile и добавление «export PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH» сделали волшебство.
21

Вы можете просто найти 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
15

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

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

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

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

  • 9
    Совет: в Terminal.app find / -name pg_dump -type f 2>/dev/null
5

Для Mac с Homebrew. У меня возникла такая проблема, когда я собирал db из Heroku. Я исправил его просто:

brew upgrade postgresql
5

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

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

затем запустите

. ~/.profile
  • 0
    добавьте его в .bash_profile
  • 0
    после этого источника ~ / .profile
2

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

brew tap petere/postgresql,

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

Удалить старый постгр:

brew unlink postgresql

brew link -f postgresql-9.6

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

Проверьте это: https://github.com/petere/homebrew-postgresql

1

Для тех, кто работает Postgres.app:

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

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

1

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

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

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

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

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

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

1

** после установки postgres версия соответствует (9.2) Создайте символическую ссылку или новый ярлык

** - on '/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

0

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

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

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

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

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

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

0

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

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

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 на терминале

Например:

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

Это работает для меня!

0

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

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

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

Попробуйте следующее:

export PATH=/usr/local/bin:$PATH
0

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

чтобы просто захватить их всех

-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

Это должно сделать трюк

  • 8
    Nonono, не просто удаляйте файлы, управляемые пакетами! Если он находится в /usr/ (а не в /usr/local/ , /home/ или /opt/ , где обычно все удаляется), вам действительно нужно использовать менеджер пакетов - rpm & yum или dpkg и apt-get или aptitude , дистро-в зависимости. Либо удалите пакет с помощью rpm либо измените PATH среды PATH в .bash_profile чтобы сначала была найдена более новая версия. Если вы сомневаетесь в том, что что-то находится под управлением пакета, используйте rpm -qf /path/to/file (RPM) или dpkg -S /path/to/file (dpkg)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню