Я пытаюсь сбросить базу данных 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 для решения этой проблемы?
Вы можете установить PostgreSQL 9.2.1 на клиентский компьютер pg_dump
или просто скопировать $PGHOME
с сервера сервера PostgreSQL на клиентскую машину. Обратите внимание, что нет необходимости initdb
создавать новый кластер на клиентской машине.
По завершении установки программного обеспечения 9.2.1 не забудьте изменить некоторые переменные среды в файле .bash_profile
.
Я столкнулся с этим при использовании 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/...
.
Проверьте установленную версию 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
Это создаст символическую ссылку на новую версию.
locate pg_dump
2>/dev/null
так как это приведет к выбросу потока ERROR, а не к его выводу на консоль. Я думаю, что нужно хотеть видеть любые ошибки, за исключением некоторых редких случаев. Например, в моем случае это напоминает мне, что я не был root, поэтому не смог увидеть некоторые каталоги, в которых была установлена более новая версия pg_dump. В общем, не удаляйте ошибки.
У Mac есть встроенная команда /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
sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Если вы используете Ubuntu, у вас может быть установлена старая версия postgresql-client
. На основе версий в вашем сообщении об ошибке решение будет выглядеть следующим образом:
sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
Каждый раз, когда вы обновляете или устанавливаете новую версию PostgreSQL, устанавливается последняя версия pg_dump
.
В вашей системе должен быть каталог PostgreSQL/bin
, в последней версии PostgreSQL, которую вы установили (последняя версия 9.2.1), и попробуйте запустить
pg_dump
оттуда.
Terminal.app
find / -name pg_dump -type f 2>/dev/null
Для Mac с Homebrew. У меня возникла такая проблема, когда я собирал db из Heroku. Я исправил его просто:
brew upgrade postgresql
Для пользователей Mac вставьте файл .profile.
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
затем запустите
. ~/.profile
Как объясняется, это связано с тем, что ваш 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
Для тех, кто работает Postgres.app:
Добавьте следующий код в .bash_profile
:
export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
Перезагрузите терминал.
Ну, у меня была такая же проблема, как у меня установлены две версии postgress.
Просто используйте правильный pg_dump, и вам не нужно ничего менять, в вашем случае:
$> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
Если у вас установлен докер, вы можете сделать что-то вроде:
$ docker run postgres:9.2 pg_dump books > books.out
Это загрузит контейнер Docker с Postgres 9.2 в нем, запустит pg_dump
внутри контейнера и напишет вывод.
** после установки 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
Альтернативный ответ, который я не думаю, что кто-то еще охватил.
Если у вас установлено несколько кластеров PG (как я), вы можете просмотреть их с помощью pg_lsclusters
.
Вы должны увидеть версию и кластер из отображаемого списка.
Оттуда вы можете сделать это:
pg_dump --cluster=9.6/main books > books.out
Очевидно, замените версию и имя кластера подходящим для ваших обстоятельств из того, что возвращает pg_lsclusters
разделяя версию и кластер с помощью /. Это предназначается для определенного кластера, против которого вы хотите работать.
Ответ звучит глупо, но если вы получили вышеуказанную ошибку и хотите запустить pg_dump для более ранней версии, перейдите в каталог bin postgres и наберите
./pg_dump servername> out.sql./игнорирует корень и ищет pg_dump в текущем каталоге
Для 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
Это работает для меня!
Если база данных установлена на другом компьютере, у нее, вероятно, установлена правильная версия pg_dump. Это означает, что вы можете выполнить команду pg_dump удаленно с помощью SSH: ssh username@dbserver pg_dump books > books.out
Вы также можете использовать аутентификацию открытого ключа для выполнения бездействия. Шаги для достижения этого:
Попробуйте следующее:
export PATH=/usr/local/bin:$PATH
Если вы используете 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/.
чтобы просто захватить их всех
У меня возникла аналогичная проблема на моей установке 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
Это должно сделать трюк
/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)