Postgresql 9,2 невідповідність pg_dump версії


141

Я намагаюся скинути базу даних 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, щоб вирішити цю проблему?


Відповіді:


27

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

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


75

Я зіткнувся з цим під час використання Heroku в Ubuntu, і ось, як я це виправив:

  1. Додайте схожий файл сховища 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/....


Це відбувається лише під час оновлення PostgreSQL. Я щойно зробив нову установку ОС і не мав жодних проблем з цим.
Сет

Для всіх, хто цікавиться, це рішення стосується і не-Heroku Ubuntu.
IanBussieres

2
Відповідно до сказаного у цій відповіді , це теж досить погана ідея.
Артур

Ця відповідь рекомендує видалити програмне забезпечення, видаливши папку. Тут ми просто відтворюємо символічне посилання.
Сет

2
Ідеально! Відтворення символічного посилання після оновлення
постгресів

61
  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

Це створить посилання на нову версію.


2
Мені набагато швидше було знайти версії з використаннямlocate pg_dump
Obromios

1
IMO, ви не повинні додавати, 2>/dev/nullоскільки це викине потік ERROR, а не надрукує його на консоль. Я думаю, що слід бачити будь-які помилки, крім деяких рідкісних випадків. Наприклад, у моєму випадку це нагадує мені, що я не був root, тому не бачив деяких каталогів, де була встановлена ​​нова версія pg_dump. Як правило, не видаляйте помилки.
Путратор

40

Маки мають вбудовану /usr/bin/pg_dumpкоманду, яка використовується за замовчуванням.

З установкою postgresql ви отримуєте ще один бінарний код на /Library/PostgreSQL/<version>/bin/pg_dump


3
Розташування буде змінюватися залежно від того, як було встановлено PostgreSQL (інсталятор EnterpriseDB, MacPorts, Homebrew тощо), але суть відповіді - що, ймовірно, у користувача вже встановлена ​​правильна версія - безумовно, вірна.
Крейг Рінгер

3
У моєму випадку відкриття .bash_profile та додавання "export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH" зробило магію.
Алекс Вебер

29

Ви можете просто знайти 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 фіналу):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Девідсон Ліма,

@ jDub9, яку версію ви використовували, приймаючи дамп? Переконайтеся, що ви використовуєте те саме
Deepak Mahakale

16

Якщо ви перебуваєте на Ubuntu, у вас може бути встановлена ​​стара версія postgresql-client. Виходячи з версій вашого повідомлення про помилку, рішенням було б таке:

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

11

Кожен раз, коли ви оновлюєте або переустановлюєте нову версію PostgreSQL, встановлюється найновіша версія pg_dump .

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


10
Порада: в Terminal.app,find / -name pg_dump -type f 2>/dev/null
Крейг Рінгер

8

Для тих, хто працює Postgres.app :

  1. Додайте до свого коду такий код .bash_profile:

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


7

Для Маків з домашньою мовою. У мене була ця проблема під час отримання db від Heroku. Я все виправив:

brew upgrade postgresql

6

Для користувачів Mac помістіть верхню частину файлу .profile.

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

потім біжи

. ~/.profile


3

Як було пояснено, це пояснюється тим, що ваш 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

Якщо трапляється якась помилка, не забудьте прочитати та дотримуватися інструкцій з приготування пива на кожному кроці.

Перевірте це, щоб дізнатися більше: https://github.com/petere/homebrew-postgresql


3

Альтернативна відповідь, яку я не думаю, що хтось інший охопив.

Якщо у вас встановлено кілька кластерів PG (як і я), ви можете переглядати тих, хто використовує pg_lsclusters.

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

Звідти ви можете зробити це:

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

Очевидно, замініть назву версії та кластеру відповідними для ваших обставин від повернених, pg_lsclustersвідокремивши версію та кластер на /. Це орієнтоване на конкретний кластер, проти якого ви хочете зіткнутися.


1
Це дуже корисно. Оскільки я був розгублений, чому pg_dumpне працював над одним із моїх кластерів. Виявилося, що вона використовувала стандартну версію Postgresql, коли один із моїх кластерів був оновлений до нової версії. Вказавши кластер, вирішили проблему.
Андрій

3

Для мене проблема оновлення 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/


1
Це не замінить існуючі виконувані файли на вашому комп’ютері, тому вам потрібно буде явно використовувати нову версію pg_dump, наприклад /usr/lib/postgresql/9.6/bin/pg_dump або створити новий ярлик, наприклад / usr / bin / pg_dump96
vinh

Мені не потрібно було явно використовувати нове, підхоплене ним.
радо

2

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

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

Це завантажить контейнер Docker з Postgres 9.2 в ньому, запустіть pg_dumpвсередині контейнера і напишіть вихід.


2

Відповідь звучить нерозумно, але якщо ви отримаєте вищевказану помилку і хочете запустити pg_dump для більш ранньої версії, перейдіть до каталогу бін postgres і введіть

./pg_dump ім'я сервера> out.sql ./ ігнорує корінь і шукає pg_dump у поточному каталозі


2

У мене була така ж помилка, і саме так я вирішив її у своєму випадку. Це означає, що ваша версія postgresql становить 9.2.1, але ви почали службу postgresql з 9.1.6.

Якщо ви запустите, psql postgresви побачите:

psql (9.2.1, server 9.1.6)

Що я зробив для вирішення цієї проблеми:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

Тепер запустіть, psql postgresі у вас повинно бути:psql (9.2.1)

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


1

** після установки постгресу версія відповідає (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 -У базі даних postgres



1

Якщо база даних встановлена ​​на іншій машині, вона, ймовірно, встановила правильну версію pg_dump. Це означає, що ви можете віддалено виконати команду pg_dump за допомогою SSH: ssh username@dbserver pg_dump books > books.out

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

  1. Створіть (якщо ще не зроблено) пару ключів за допомогою команди ssh-keygen.
  2. Скопіюйте відкритий ключ на сервер бази даних, як правило, ~ / .ssh / санкціонований_кейдів.
  3. Перевірте, чи з'єднання працює з командою ssh.

1

Ну, у мене був той самий випуск, як у мене встановлені дві версії постгресу.

Просто використовуйте належний pg_dump, і вам не потрібно нічого змінювати у вашому випадку:

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

0

Якщо ви використовуєте Postgres.app 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/.

щоб просто захопити їх усіх


0

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

Це працює для мене!


0

Завантажте відповідну версію 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


-6

У моїй установці Fedora 17 виникли подібні проблеми. Це те, що я зробив, щоб обійти проблему

  • Видаліть вбудований файл pg_dumpу /usr/bin/pg_dump(як root: "rm / usr / bin / pg_dump")
  • Тепер зробіть символічне посилання установки postgresql

    Знову як корінь ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Це повинно зробити трюк


9
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)
Крейг Рінгер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.