Несоответствие версии дампа 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 ответ:
вы можете установить PostgreSQL 9.2.1 в
pg_dump
клиентская машина или просто скопируйте$PGHOME
с сервера PostgreSQL на клиентский компьютер. Обратите внимание, что нет необходимостиinitdb
новый кластер на клиентской машине.после завершения установки программного обеспечения 9.2.1 не забудьте отредактировать некоторые переменные среды в вашем .
я столкнулся с этим при использовании Heroku на Ubuntu, и вот как я это исправил:
добавьте репозиторий apt PostgreSQL, как описано в разделе"загрузка 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/...
.
проверить установленную версию(ы) помощью 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
Это создаст символическую ссылку на новую версию.
У 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.приложение:
добавить следующий код
.bash_profile
:export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
перезапустить терминал.
Если вы используете 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/.
просто схватить их всех
если база данных установлена на другой машине, вероятно, установлена правильная версия pg_dump. Это означает, что вы можете выполнить команду pg_dump удаленно с SSH:
ssh username@dbserver pg_dump books > books.out
вы также можете использовать аутентификацию с открытым ключом для выполнения без пароля. Шаги для достижения этого:
- создать (если еще не сделано) пару ключей с помощью команды ssh-keygen.
- скопировать публичный ключ на сервер базы данных, как правило, ~/.ssh / authorized_keys.
- проверьте, работает ли соединение с командой 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
это должно сделать трюк