Skip to content

Документация по BlackArch на русском языке

Инструкции, советы, новые программы

Menu
  • Главная
  • Список инструментов
  • HackWare
Menu

Ошибка PostgreSQL «An old version of the database format was found.» (РЕШЕНО)

Posted on 20.04.202008.06.2021 by Alexey

Если во время запуска службы PostgreSQL:

sudo systemctl start postgresql.service

это не получилось и появилось следующее сообщение:

Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xe" for details.

То проверьте статус данной службы:

systemctl status postgresql.service

В моём случае это:

● postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Mon 2020-04-20 12:23:08 MSK; 8s ago
    Process: 63126 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=1/FAILURE)

апр 20 12:23:08 HackWare systemd[1]: Starting PostgreSQL database server...
апр 20 12:23:08 HackWare postgres[63126]: An old version of the database format was found.
апр 20 12:23:08 HackWare postgres[63126]: See https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL
апр 20 12:23:08 HackWare systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
апр 20 12:23:08 HackWare systemd[1]: postgresql.service: Failed with result 'exit-code'.
апр 20 12:23:08 HackWare systemd[1]: Failed to start PostgreSQL database server.

Ключевой в этом выводе является строка:

An old version of the database format was found.

Она говорит о том, что найдена база данных старого формата.

Для решения проблемы предлагается перейти по ссылке: https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL

Обновление баз данных не требуется при минорных обновлениях PostgreSQL, но может потребоваться при мажорных обновлениях, поскольку из-за нововведений можем поменяться их схема.

Обновление можно сделать с сохранением имеющейся информации, а также без её сохранения — фактически, удалив и заново инициализировав базу данных. Второй вариант подходит для тех, у кого пакет PostgreSQL был установлен давно, но необходимость его использования возникла значительно после его установки. В результате вы обнаружили, что служба PostgreSQL не работает, хотя она никогда и не использовалась.

Как обновить базы данных PostgreSQL с сохранением информации

Для обновления баз данных используется утилита pg_upgrade. Данная утилита включена в пакет postgresql. Данная утилита может обновлять базы данных начиная с 8.4.X.

Обратите внимание, что каталог кластера баз данных не меняется от версии к версии, поэтому перед запуском pg_upgrade необходимо переименовать существующий каталог данных и перейти в новый каталог. Новый кластер баз данных необходимо инициализировать.

Перед обновлением остановите службу, если она ещё запущена:

sudo systemctl stop postgresql.service
systemctl status postgresql.service

Для обновления баз данных необходимы исполнительные файлы предыдущей версии PostgreSQL, они находятся в пакете postgresql-old-upgrade, установите его и обновите PostgreSQL:

sudo pacman -S postgresql postgresql-libs postgresql-old-upgrade

Переместите старые данные и инициализируйте базу данных:

sudo mv /var/lib/postgres/data /var/lib/postgres/olddata
sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp
sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
cd /var/lib/postgres/tmp
sudo -u postgres initdb -D /var/lib/postgres/data

Следующая команда выполнит перенос данных из старого кластера в новой, в этой команде вам нужно заменить PG_VERSION на версию предыдущей базы данных:

sudo -u postgres pg_upgrade -b /opt/pgsql-PG_VERSION/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data

Например:

sudo -u postgres pg_upgrade -b /opt/pgsql-12/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data

После этого вновь запустите службу и проверьте её статус:

sudo systemctl start postgresql.service
systemctl status postgresql.service

Как обновить базы данных PostgreSQL без сохранения информации

Итак, чтобы инициировать базу данных нового формата PostgreSQL выполните следующие команды:

sudo mv /var/lib/postgres/data /var/lib/postgres/olddata
sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp
sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
cd /var/lib/postgres/tmp
sudo -u postgres initdb -D /var/lib/postgres/data

После этого вновь запустите службу и проверьте её статус:

sudo systemctl start postgresql.service
systemctl status postgresql.service

Больше информации вы найдёте в официальной Вики: https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL

Близкие статьи

  • Как запустить Metasploit в BlackArch (96.5%)
  • Восстановление из чёрного экрана при неудачной установке проприетарных AMD драйверов в BlackArch / Arch (53.5%)
  • Решение проблемы X server не поднимается в VirtualBox VM после обновления ядра до 4.5 (53.5%)
  • Решение ошибки reaver: invalid option -- 'K' (53.5%)
  • Решение проблемы Arch Linux kernel 4.7 в VirtualBox: reached target graphical interface (53.5%)
  • Что делать, если Arch Linux не загружается (RANDOM - 53.5%)

1 thought on “Ошибка PostgreSQL «An old version of the database format was found.» (РЕШЕНО)”

  1. Sergey En:
    15.01.2021 в 09:39

    Вот это мне пригодилось! Случайно нажал кнопочку - обновить. И через пару дней выяснил, когда понадобилось, что БД не стартует. Отсюда правило - не обновляй то, что не сломано) Так получается…

    Ответить

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo

Поиск

Свежие записи

  • Ошибка «не удалось завершить транзакцию (неверный или поврежденный пакет)» (РЕШЕНО)
  • Изменения в пакете linux-firmware: требования к ядру, выделение больших файлов в отдельные пакеты
  • Ошибка error: failed to synchronize all databases (unable to lock database) (РЕШЕНО)
  • Обновление загрузчика systemd-boot в /boot
  • Ошибка «-bash: append_path: команда не найдена» (РЕШЕНО)

Свежие комментарии

  • Alexey к записи Установка Дополнений гостевой ОС VirtualBox для BlackArch (Arch Linux)
  • Владимир к записи Установка Дополнений гостевой ОС VirtualBox для BlackArch (Arch Linux)
  • wimpex к записи Установка BlackArch на флешку или на внешний диск
  • wimpex к записи Установка BlackArch на флешку или на внешний диск
  • wimpex к записи Установка BlackArch на флешку или на внешний диск




Рубрики

  • Sniffing и Spoofing
  • Архив
  • Взлом Wi-Fi сетей
  • Инструкции
  • Новости
  • Общая информация/новости
  • Разведка
  • Справка и подсказки




Яндекс.Метрика
© 2022 Документация по BlackArch на русском языке | Powered by Minimalist Blog WordPress Theme