You are here: Home » Справка и подсказки » Ошибка PostgreSQL «An old version of the database format was found.» (РЕШЕНО)

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

Если во время запуска службы 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

По этой ссылке написано довольно размыто и команды, в целом, оказались не рабочими. В частности команды для обновления базы данных не заработали вовсе из-за отсутствия нужных исполнимых файлов (я искал их по всей системе, а не только в указанных расположения).

Я сумел довести предложенные в Вики команды до рабочего состояния. Эти команды переименуют папку со старой базой данных в /var/lib/postgres/olddata и инициируют новую базу данных. Меня это устраивает, поскольку в старой базе данных нет ничего значимого. Если вы хотите сохранить старые данные, то обратитесь к приведённой выше инструкции и добейтесь обновления формата!

Итак, чтобы инициировать базу данных нового формата 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

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

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