Skip to content

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

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

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

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

Posted on 20.04.202001.06.2022 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

Возможные ошибки и их исправление

1.

Если во время выполнения команды

sudo mv /var/lib/postgres/data /var/lib/postgres/olddata

вы столкнулись с ошибкой

mv: cannot move '/var/lib/postgres/data' to '/var/lib/postgres/olddata/data': Directory not empty

то она означает, что вы уже обновляли базу данных с сохранением предыдущей базы данных в директорию /var/lib/postgres/olddata/data. Вы можете сохранить очередную базу данных в другую директорию, либо просто удалите имеющуюся:

sudo rm -rf /var/lib/postgres/olddata/data

2.

Если во время выполнения команды

sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp

вы столкнулись с ошибкой

mkdir: cannot create directory ‘/var/lib/postgres/tmp’: File exists

то просто пропустите указанную команду, поскольку директория /var/lib/postgres/tmp уже существует.

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

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

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


Поиск


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

  • Ошибка «error: failed to commit transaction (invalid or corrupted package)» (РЕШЕНО)
  • Ошибка «TypeError: ‘AURPackageInfo’ does not have attribute ‘submitter’» (РЕШЕНО)
  • Ошибка phpMyAdmin «Error: Undefined constant «SODIUM_CRYPTO_SECRETBOX_KEYBYTES»» (РЕШЕНО)
  • Ошибка «error: GPGME error: No data. error: failed to synchronize all databases (unexpected error)» (РЕШЕНО)
  • Как в Arch Linux перейти к предыдущей версии ядра. Как установить и переключиться на linux-lts

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

  • Vova к записи Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP8 и phpMyAdmin) в Arch Linux / BlackArch
  • Furi к записи Приложение в .AppImage не запускается в Arch Linux (РЕШЕНО)
  • Alexey к записи Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP8 и phpMyAdmin) в Arch Linux / BlackArch
  • Юрок к записи Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP8 и phpMyAdmin) в Arch Linux / BlackArch
  • Aleksandr к записи Ошибка error: failed to synchronize all databases (unable to lock database) (РЕШЕНО)




Рубрики

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




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