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

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


person Chris Colla    schedule 11.10.2012    source источник
comment
простые шаги stackoverflow.com/a/42158528/4758119   -  person Deepak Mahakale    schedule 20.03.2020


Ответы (31)


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

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

person francs    schedule 11.10.2012

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

person Seth    schedule 08.04.2014
comment
Это происходит только при обновлении PostgreSQL. Я только что установил новую ОС, и никаких проблем с этим не возникло. - person Seth; 02.05.2014
comment
Для всех, кому интересно, это решение применимо и к Ubuntu, отличным от Heroku. - person IanBussieres; 07.07.2014
comment
Согласно тому, что было сказано в этом ответе, это тоже довольно плохая идея. - person Arthur; 29.08.2014
comment
В этом ответе рекомендуется удалить программное обеспечение, удалив папку. Здесь мы просто воссоздаем символическую ссылку. - person Seth; 29.08.2014
comment
Идеально! Воссоздание символической ссылки после обновления postgres - person Yo Ludke; 04.05.2015
comment
У меня отлично сработало. Я никогда не предполагал, что несоответствие версий было вызвано / usr / bin / pg_dump, который не имеет ничего общего с моим свежим обновлением PostgreSQL. Меня устраивает решение ln. - person Franco; 16.01.2016
comment
Я использую centos и, выполнив yum postgresql, понимаю, что у меня установлена ​​последняя версия postgresql. И я все еще получаю эту ошибку :( Так что у меня это не работает. - person VaTo; 09.02.2017
comment
@Va Чтобы увидеть дополнительный абзац, который я добавил к третьему шагу. - person Seth; 09.02.2017
comment
@VaTo каков полный текст вашей ошибки? Поскольку вы используете CentOS, замените этот путь на путь к вашей установке PostgreSQL. - person Seth; 10.02.2017
comment
Мне пришлось получить более новую версию pg_dump с другого компьютера, а затем скопировать этот файл pg_dump на этот компьютер, и теперь он работает. - person VaTo; 10.02.2017

  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
    

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

person Omer Aslam    schedule 03.09.2015
comment
Мне было намного быстрее найти версии, использующие locate pg_dump - person Obromios; 05.10.2018
comment
IMO, вам не следует добавлять 2>/dev/null, поскольку это приведет к выбросу потока ERROR, а не к его печати на консоли. Я думаю, что нужно видеть любые ошибки, за исключением некоторых редких случаев. Например, в моем случае это напоминает мне, что я не был пользователем root, поэтому не видел некоторые каталоги, в которых была установлена ​​более новая версия pg_dump. В общем, не удаляйте ошибки. - person Poutrathor; 18.02.2019

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

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

person user2148301    schedule 08.03.2013
comment
Местоположение будет зависеть от того, как был установлен PostgreSQL (установщик EnterpriseDB, MacPorts, Homebrew и т. Д.), Но суть ответа - что у пользователя, вероятно, уже установлена ​​нужная версия - определенно верна. - person Craig Ringer; 21.04.2013
comment
В моем случае открытие .bash_profile и добавление экспорта PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH сделали чудо. - person Alex Weber; 08.07.2013

Вы можете просто найти 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
person Deepak Mahakale    schedule 10.02.2017
comment
Для пользователей CentOS (моя версия 6.9 Final): sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost - person Davidson Lima; 25.05.2018
comment
@ jDub9 какую версию вы использовали при снятии дампа? Убедитесь, что вы используете тот же - person Deepak Mahakale; 28.06.2019

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

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
person Abe Voelker    schedule 08.03.2014

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

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

person solaimuruganv    schedule 11.10.2012
comment
Совет: в Terminal.app, find / -name pg_dump -type f 2>/dev/null - person Craig Ringer; 21.04.2013

В Ubuntu вы можете просто добавить самый последний репозиторий Apt, а затем запустить:

sudo apt-get install postgresql-client-11
person collimarco    schedule 04.09.2019

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

brew upgrade postgresql
person hcarreras    schedule 12.09.2016
comment
Иногда вы можете (легко) получить от него определенные версии, также сделайте brew search postgres, чтобы увидеть их все. - person rogerdpack; 21.09.2020

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

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

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

person Andreas    schedule 07.10.2017

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

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

затем беги

. ~/.profile
person Andrey Yasinishyn    schedule 13.10.2013

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

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

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

person mzsanford    schedule 07.10.2016
comment
Это, безусловно, самое простое и гибкое решение. - person mikebridge; 18.03.2021

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

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

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

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

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

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

person ManoDestra    schedule 25.05.2018
comment
Это очень полезно. Как я был сбит с толку, почему pg_dump не работал на одном из моих кластеров. Оказывается, он использовал версию Postgresql по умолчанию, когда один из моих кластеров был обновлен до более новой версии. Указав кластер, решил проблему. - person Andrius; 03.11.2019

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

brew tap petere/postgresql,

brew install <formula> (eg: brew install petere/postgresql/postgresql-9.6)

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

brew unlink postgresql

brew link -f postgresql-9.6

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

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

person ThangTD    schedule 09.11.2016

Для меня проблема заключалась в том, что обновление 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/

person Glen Thompson    schedule 28.10.2019
comment
Это не заменит существующие исполняемые файлы на вашем компьютере, поэтому вам нужно будет явно использовать новую версию pg_dump, например /usr/lib/postgresql/9.6/bin/pg_dump или создайте новый ярлык, например / usr / bin / pg_dump96 - person vinh; 27.01.2020
comment
Мне не нужно было явно использовать новую, которую я подобрал. - person rado; 05.05.2020

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

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

person Joe Root    schedule 11.04.2018

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

person ช่างคอม ผู้ยิ่งใหญ่    schedule 04.12.2013

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

export PATH=/usr/local/bin:$PATH
person Benjamin Crouzier    schedule 17.10.2014

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

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

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

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

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

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
person Petr    schedule 15.11.2016

У меня была такая же ошибка, и вот как я решил ее в моем случае. Это означает, что ваша версия postgresql - 9.2.1, но вы запустили службу postgresql версии 9.1.6.

Если вы запустите psql postgres, вы увидите:

psql (9.2.1, server 9.1.6)

Что я сделал для решения этой проблемы:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

Теперь запустите psql postgres, и у вас должно получиться: psql (9.2.1)

Вы также можете запустить brew services list, чтобы увидеть статус ваших postgres.

person bright    schedule 19.06.2019

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

or

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

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

person mlebarron    schedule 01.10.2013

Для 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

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

person zhaoqing    schedule 27.10.2016

Загрузите соответствующую версию 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

person lobi    schedule 17.06.2020


Первый шаг: проверьте, есть ли у 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

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

person rogerdpack    schedule 21.09.2020

Полное руководство по шагам

Ваша локальная версия должна соответствовать той, которая используется AWS на удаленном сервере. К сожалению, apt-get install будет отставать от официального выпуска.

Итак, вам нужно действовать следующим образом:

sudo apt-get remove postgresql
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Затем проверьте, что ваше сообщение об ошибке должно быть примерно таким

pg_dump: server version: 12.3; pg_dump version: 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)

Это означает, что вам нужна версия 12 (а не 13) для установки соответствующей версии, указав номер версии (без второстепенного) во время новой установки:

sudo apt-get -y install postgresql-12

Теперь работает:


pg_dump -h {{endpoint}} -U {{username}} -f dump.sql {{tablename}}

NB: вы получаете конечную точку в разделе Подключение и безопасность, перейдите по адресу https://us-east-2.console.aws.amazon.com/rds/home?region.=us-east-2 и нажмите ваш экземпляр БД

person Antonin GAVREL    schedule 04.03.2021

Это сработало для меня, набор решений сверху и с других сайтов. Если вы указали версию вроде postgressql-client-11 раньше, вам нужно сначала удалить эту версию.

sudo apt-get remove -y postgresql-client
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y postgresql-client-12
person Anton Swanevelder    schedule 10.03.2021

У меня было такое же сообщение, для меня это было то, что мне нужно было настроить следующее:

export LD_LIBRARY_PATH=/usr/pgsql-12/lib:....
export LD_RUN_PATH=/usr/pgsql-12/lib:.....
person user15523351    schedule 31.03.2021

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

docker run --rm -e PGPASSWORD="YouPassword" -e POSTGRES_PASSWORD=some postgres:12 pg_dump -U price -Fp -n $name -s -d $database -h $hostname -U $username -w > schema.sql

person quickes    schedule 09.07.2021

У меня возникла аналогичная проблема при установке 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

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

person Joseph N.    schedule 21.04.2013
comment
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) - person Craig Ringer; 21.04.2013