Администрирование

Обновление PostgreSQL

Просмотры: 1745
Категория: Администрирование
Создано: 22 ноября 2020
Тэги: PostgreSQL CentOS

Как и любой программный продукт, СУБД PostgreSQL каждой версии имеет ограниченный срок поддержки. Так, на момент написания статьи, заканчивается поддержка версии 9.5 и производитель настоятельно рекомендует перейти на более актуальные версии. Также часто встречается ситуация, когда для разворачивания на сервере какого-то ПО необходима PostgreSQL не ниже определённой версии. Например, сейчас CMS Moodle (последняя версия 3.10) требует PostgreSQL не ниже версии 9.6. Однако, популярная сегодня ОС для сервера CentOS 7 "из коробки" предоставляет PostgreSQL только версии 9.2. В этой статье я опишу простой способ перевода СУБД PostgreSQL на актуальную версию для случая CentOS 7. Для других ОС данный рецепт тоже можно применять с небольшими косметическими изменениями.

Итак, пусть на сервере установлена PostgreSQL 9.6. Исполняемые файлы находятся в каталоге /usr/pgsql-96/bin/. Данные расположены в каталоге /var/lib/pgsql/96/data/. Установим последнюю на текущий момент PostgreSQL версии 13.1 и перенесем все данные. Для этого сначала установим соответствующий репозиторий (для RedHat Enterprise, CentOS, Scientific или Oracle версии 7)

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Теперь устанавливаем сам сервер 13-й версии

sudo yum install -y postgresql13-server

Инициализируем базы данных

sudo /usr/pgsql-13/bin/postgresql-13-setup initdb

Теперь займемся переносом данных из БД версии 9.6 в БД версии 13.1. Новые данные будут располагаться в каталоге /var/lib/pgsql/13/data/. Но сначала нужно прописать все разрешения для пользователя postgres в файле pg_hba.conf . Новый файл находится в том же каталоге, где и сами данные: /var/lib/pgsql/13/data/ . Перелогиниваемся в postgres

sudo su - postgres

и правим файл pg_hba.conf в соответствующем каталоге: даем нужные полномочия для postgres. Теперь нужно остановить сервер PostgreSQL (делаем это из-под пользователя, которому разрешена команда sudo):

sudo systemctl stop postgresql-96

Переносим данные (из-под postgres):

/usr/pgsql-13/bin/pg_upgrade --old-datadir /var/lib/pgsql/96/data --new-datadir /var/lib/pgsql/13/data --old-bindir /usr/pgsql-96/bin --new-bindir /usr/pgsql-13/bin

При запуске pg_upgrade проверит на совместимость обе директории и если не будет ошибок, перенесет данные. Если появляются ошибки, читаем внимательно то, что пишет pg_upgrade и исправляем нужные файлы. Часто причиной ошибок является неправильные разрешения для postgres в pg_hba.

После переноса запускаем новый сервер:

sudo systemctl start postgresql-13

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

sudo systemctl disable postgresql-96

Новый добавляем в автозапуск

sudo systemctl enable postgresql-13

Если убедились, что новый сервер работает хорошо, можно удалить старый кластер (из-под postgres):

/var/lib/pgsql/9.6/data/delete_old_cluster.sh

или просто (это содержимое файла со скриптом):

rm -rf '/var/lib/pgsql/9.6/data'

Переход на новый сервер PostgreSQL завершен. Не забываем отредактировать pg_hba.conf или восстановить его старую версию.

UPD: Если PostgreSQL ставился из исходников в /usr/local/pgsql, тогда поступаем следующим образом. Сначала останавливаем сервер

sudo systemctl stop postgresql

Распаковываем архив и компилиуем (обязательно с параметром --with-systemd)

tar xjvf postgresql-13.1.tar.bz2

cd postgresql-13.1

./configure --prefix=/usr/local/pgsql --with-icu --with-systemd

make

ОБЯЗАТЕЛЬНО!!! Переименовываем каталог со старым сервером

sudo mv /usr/local/pgsql{,.old}

Теперь инсталлируем новый сервер

make install

Добавляем каталог для данных и меняем его владельца

sudo mkdir /usr/local/pgsql/data

sudo chown postgres /usr/local/pgsql/data

Инициализируем новую базу

sudo su - postgres

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Восстанавливаем старый конфигурационный файл

cp /usr/local/pgsql.old/data/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf

Выходим из postgres и запускаем сервер

sudo systemctl start postgresql

Старые данные удаляем

sudo rm -rf /usr/local/pgsql.old

Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене

Новое видео
Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»
Поддержать автора сайта!
​ Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.
Расписание пробников Статграда в 2026/27 учебном году
Информатика ОГЭ 9 класс
  1. 13 октября 2026 года
  2. 3 декабря 2026 года
  3. 21 января 2027 года
  4. 19 февраля 2027 года
  5. 23 марта 2027 года
  6. 27 апреля 2027 года
Математика ОГЭ 9 класс
  1. 23 сентября 2026 года
  2. 1 декабря 2026 года
  3. 22 января 2027 года
  4. 3 марта 2027 года
  5. 14 апреля 2027 года
Физика ОГЭ 9 класс
  1. 19 октября 2026 года
  2. 10 декабря 2026 года
  3. 29 января 2027 года
  4. 17 марта 2027 года
  5. 22 апреля 2027 года
Математика ЕГЭ 10 класс
  1. 3 февраля 2027 года
  2. 11 мая 2027 года
Информатика ЕГЭ 11 класс
  1. 22 октября 2026 года
  2. 15 декабря 2026 года
  3. 26 января 2027 года
  4. 2 марта 2027 года
  5. 13 апреля 2027 года
Математика ЕГЭ 11 класс
  1. 30 сентября 2026 года
  2. 17 декабря 2026 года
  3. 9 февраля 2027 года
  4. 16 марта 2027 года
  5. 21 апреля 2027 года
Физика ЕГЭ 11 класс
  1. 14 октября 2026 года
  2. 16 декабря 2026 года
  3. 4 февраля 2027 года
  4. 12 марта 2027 года
  5. 9 апреля 2027 года