PostgreSQL – переход с версии 9.6 на 10.9

Имеется:

  • Debian 9 (Stretch) 64-bit
  • PostgreSQL 9.6.8 (от PostgresPro)

Задача:

  • Обновить PostgreSQL на более новую версию 10.9 (от 1С) и ничего не про*бать

План действий:

  1. Теория по обновлению PostgreSQL
  2. Создание резервной копии данных
  3. Удаление текущей PostgreSQL 9.6.8
  4. Подготовка к установке PostgreSQL 10.9 от 1С
  5. Установка
  6. Разворот резервной копии данных

1. Обновление PostgreSQL

Для перехода PostgreSQL с версии 9 на версию 10 недостаточно установить новые пакеты и подсунуть имеющийся каталог данных кластера.

Отсюда:

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

В связи с тем, что у PostgresPro изменились правила лицензирования, и для свободного использования доступна  лишь версия Postgres Pro Standard “для тестирования, разработки ПО, ознакомления с функциональностью СУБД,  использования в образовательном процессе”, и для коммерческих целей ее использовать низя.

Поэтому планируется устанавливать уже готовые “пропатченные” пакеты, собранные самим 1С, и использовать pg_upgrade не будем.

Один из вариантов обновления заключается в выгрузке данных из одной основной версии Postgres Pro и загрузке их в другую — для этого необходимо использовать средство логического копирования, например pg_dumpall; копирование на уровне файловой системы не подходит. В самом сервере есть проверки, которые не дадут использовать каталог данных от несовместимой версии Postgres Pro, так что если попытаться запустить с существующим каталогом данных неправильную версию сервера, никакого вреда не будет.

Если попытаться запустить новый PostgreSQL со старым каталогом данных, будет вот такая ошибка:

[38003] ВАЖНО: файлы базы данных не совместимы с сервером
[38003] ПОДРОБНОСТИ: Каталог данных инициализирован сервером PostgreSQL версии 9.6, не совместимой с данной версией (10.9 (Ubuntu 10.9-5.1C)).


2. Создание резервной копии данных

По советам postgresPro:

Для создания копии рекомендуется применять программы pg_dump и pg_dumpall от новой версии Postgres Pro, чтобы воспользоваться улучшенными функциями, которые могли в них появиться. Хотя этот совет может показаться абсурдным, ведь новая версия ещё не установлена, ему стоит последовать, если вы планируете установить новую версию рядом со старой. В этом случае вы сможете выполнить установку как обычно, а перенести данные позже. Это также сократит время обновления.

Я создавал бэкап старой версией PostgreSQL, а потом устанавливал новую.


3. Удаление текущей PostgreSQL 9.6.8

Смотрим что установлено:

Сохраняем конфиги для дальнейшего переноса настроек в новую версию (если в них что-то меняли, конечно):

Удаление старых пакетов версии 181. Можно снести postgresql-common, который потащит за собой все остальные:

Удаляем с помощью purge , чтобы полностью снести конфиги текущей версии PostgreSQL, иначе при установки новой версии будут ошибки типа:

Not replacing deleted config file /etc/postgresql-common/createcluster.conf

В целом вот что снеслось:

postgresql-client-pro-1c-9.6
postgresql-common-pro-1c
postgresql-contrib-pro-1c-9.6
postgresql-pro-1c-9.6


4. Подготовка к установке PostgreSQL 10.9 от 1С

В особенностях релиза написано:

Поддержка версии 10.9.5.1 реализована в версии 1С:Предприятии 8.3.14 и старше.
Cписок поддерживаемых дистрибутивов Linux:
DEB, Ubuntu 16.04, должны быть установлены:
sudo apt-get install libicu55 postgresql-common
sudo apt-get install libicu-dev (для целей сборки)
Дополнительные модули:
plperl plpython plpython3 pltcl test devel docs

В архиве postgresql-10.9-5.1C_amd64_deb лежат уже собранные пакеты:

  • libpq5_10.9-5.1C_amd64.deb
  • postgresql-10_10.9-5.1C_amd64.deb
  • postgresql-client-10_10.9-5.1C_amd64.deb

В архиве postgresql-10.9-5.1C_amd64_addon_deb лежат доп.модули (мне не понадобились):

  • libecpg6_10.9-5.1C_amd64.deb
  • libecpg-compat3_10.9-5.1C_amd64.deb
  • libecpg-dev_10.9-5.1C_amd64.deb
  • libpgtypes3_10.9-5.1C_amd64.deb
  • libpq-dev_10.9-5.1C_amd64.deb
  • postgresql-10-dbg_10.9-5.1C_amd64.deb
  • postgresql-doc-10_10.9-5.1C_all.deb
  • postgresql-plperl-10_10.9-5.1C_amd64.deb
  • postgresql-plpython-10_10.9-5.1C_amd64.deb
  • postgresql-plpython3-10_10.9-5.1C_amd64.deb
  • postgresql-pltcl-10_10.9-5.1C_amd64.deb
  • postgresql-server-dev-10_10.9-5.1C_amd64.deb

В архиве Patch_SUBD_PostgreSQL_10.9-5.1C лежат файлы для ручной сборки пропатченой postgresql (“голая” версия postgresql и патчи для нее):

  • файлы .patch
  • postgresql-10_10.9-5.1C.debian.tar.xz
  • postgresql-10_10.9-5.1C.dsc
  • postgresql-10_10.9-5.1C_source.changes
  • postgresql-10_10.9.orig.tar.bz2

5. Установка PostgreSQL 10.9

1) Установим “правильную” локаль:

2) как сказано в особенностях релиза, сначала ставим зависимости libicu55 и postgresql-common :

2.1) libicu55

В debian 9 нет пакета libicu версии 55. Варианты решения проблемы:

а) скачать liibicu55 напрямую из репозитория и установить (мое решение):

libicu55_55.1-7_amd64.deb 2016-01-21 21:29 7.3M
libicu55_55.1-7_i386.deb 2016-01-21 21:30 7.4M
libicu55_55.1-7ubuntu0.4_amd64.deb 2018-03-28 17:48 7.3M
libicu55_55.1-7ubuntu0.4_i386.deb 2018-03-28 17:48 7.4M

 

б) или пересобрать пакет PostgreSQL с использованием другой версии libicu (не пробовал)

1) копируем postgresql-contrib-*-1.1C_amd64.deb в папку на сервере, входим в нее

2) Распаковываем пакет:

3) после:

4) далее открываем в текстовом редакторе файл «control»:

5) ищем строку libicu* (>= 1.4.6) и меняем ее на libicu52 (>= 1.4.6)

6) сохраняем изменения и собираем пакет обратно:

 

в) говоряяяят, есть утилита aptly, позволяющая легко и удобно организовать управление пакетами, исправляя проблемы зависимостей (не пробовал).

 

2.2) postgresql-common

В debian 9 пакеты PosqtgreSQL имеют старую версию 181, а нужно >= 182.

Подключаем репозиторий PosqtgreSQL от более новой версии Debian 10 (buster), в которой имеются либы PosqtgreSQL версии 207.

Устанавливаем:

Если будет ошибка типа:

Not replacing deleted config file /etc/postgresql-common/createcluster.conf

Значит, не вычистили систему от конфигов прежней версии PostgreSQL.

 

3.1) Вариант установки уже собранных пакетов.

Ставим пакеты из основного архива: libpq5, postgresql-client и postgresql.

Но для libpq5 может понадобиться пакет libssl1.0.0, который отсутствует в Debian 9.

Он есть в Debian 8 (jessie). Подключим репозиторий:

Устанавливаем:

Закомментируем (или удалим) устаревший репозиторий и обновим индексы.

И пробуем устанавливать опять.

 

3.2) Вариант ручной сборки пропатченной PostgreSQL и ее установка (не пробовал)

Описано здесь.

По поводу сборки, то имеет смысл собирать под текущую архитектуру процессора, используя ключи сборки -march=native -O3 -flto – это позволяет существенно (до 20-25%) повысить скорость стандартного теста pgbench (у меня с 8к до 10,8к увеличилась скорость при j10 и с10).

4) Проверяем, что установили:

По-молчанию путь к кластеру установлен по пути:

/var/lib/postgresql/10/main

А логи тут:

/var/log/postgresql/postgresql-10-main.log

 

Можем переместить созданный каталог данных кластера в нужное нам место, или проинициализировать (создать) новый сразу в нужном месте:

1) вариант с переносом:

2) вариант с инициализацией нового с помощью утилиты initdb (описание).

Но нужно, чтобы новый каталог был пуст, иначе возникнет ошибка.

 

Приводим конфиги postgresql к нужному виду.

Тут добавил в конец файла измененные значения параметров:

Тут добавил trust для учеток postgres и zabbix:

 

Готово. Теперь можно попробовать запустить сервер баз данных:

Или сразу службу:

Добавляем службу в автозагрузку:

Проверяем слушается ли порт 5432.


6. Разворот резервной копии данных

Запускаем процесс восстановления из бэкапа (а на самом деле, процесс выполнения SQL-команд из файла) с помощью psql:

$ psql -f backup_postgresql_9.6.sql 

Нужно иметь ввиду, что владельцем файла бэкапа и каталога, в котором он лежит (!), должен быть postgres, иначе получим ошибку доступа.

Готово. Все должно подняться.

0

2 thoughts on “PostgreSQL – переход с версии 9.6 на 10.9

    1. Привычка ставить то, что просит, во избежание непредвиденных проблем. Хотя в данном случае можно и подредактировать зависимость, согласен.

      0

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

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