Несоответствие версии дампа Postgresql 9.2 pg


Я пытаюсь сбросить базу данных 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

The --ignore-version опция теперь обесценивается и действительно не будет решением моей проблемы, даже если бы это сработало.

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

21 111

21 ответ:

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

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

я столкнулся с этим при использовании 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/....

  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
    

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

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

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

вы можете найти 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

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

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

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

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

для пользователей mac положите к верхней части .файл профиля.

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

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

. ~/.profile

для маков с домашним пивом. У меня была эта проблема при извлечении БД из Heroku. Я исправил это просто работает:

brew upgrade postgresql

как уже объяснялось, это потому, что ваш 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

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

проверьте это для получения дополнительной информации:https://github.com/petere/homebrew-postgresql

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

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

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

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

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

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

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

Для тех, кто работает Postgres.приложение:

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

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

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

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

попробуй это:

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

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

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

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

для компьютеров 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

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

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

./pg_dump имя_сервера > out.язык SQL. / игнорирует корень и ищет pg_dump в текущем каталоге

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

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

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

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

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

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

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

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

    снова как корень ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

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