Перейти к основному содержимому

Восстановление работы СУБД Pangolin после обновления ОС Astra 1.7 до версии 1.8

Важно

Перед началом выполнения процедуры обновления операционной системы убедитесь, что на сервере установлена версия СУБД Pangolin 6.5.2 или выше для Astra 1.7.

Поскольку инструкция является универсальной для standalone и cluster архитектур, каждый пункт необходимо выполнить на всех узлах. Обновление необходимо производить только тех компонентов, которые есть на исходном стенде. Иначе пропустите выполнение шага. Для удобства, такие шаги помечены тегом – опционально.

Перед началом выполнения инструкции необходимо убедиться, что apt репозитории настроены корректно, команда sudo apt update должна показать список настроенных репозиториев и отработать без ошибок.

Обновление СУБД осуществляется от пользователя с правами sudo, пользователя postgres и пользователя kmadmin_pg. Необходимо учесть это на старте выполнения инструкции.

В инструкции для восстановления данных используется директория /old_root, созданная в процессе обновления утилитой astra-console-upgrade. Если вы уже используете или хотите использовать утилиту pg_probackup, можно пропустить шаги по восстановлению данных из этой инструкции и восстановить их с помощью pg_probackup.

При конфигурации cluster рекомендуется:

  • Останавливать сервисы следующим образом: replica -> arbiter -> master.
  • Запускать сервисы следующим образом: master -> arbiter -> replica.
Важно

Перед началом выполнения процедуры обновления сохраните дистрибутив СУБД Pangolin для Astra 1.8 на каждый узел в домашней директории пользователя, так как данная директория будет оставлена без изменений в процессе обновления. В инструкции каталог будет размещен по пути ~/pangolin_astrase18.

Шаг 1. Подготовка виртуальной машины к процедуре обновления ОС

  1. (Опционально) Для конфигурации с Pangolin Manager. Введите компонент в режим паузы:

    sudo -iu postgres
    pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=true' --force
    exit
  2. Остановите все компоненты СУБД Pangolin:

    • Без функциональности «Отказ от root»:

      # (опционально) Для конфигурации с pangolin-manager
      sudo systemctl stop pangolin-manager
      sudo systemctl disable pangolin-manager

      # (опционально) Для конфигурации с etcd
      sudo systemctl stop etcd

      # (опционально) Для конфигурации без pangolin-manager
      sudo systemctl stop postgresql
      sudo systemctl disable postgresql

      # Для любой конфигурации
      sudo systemctl stop pangolin-pooler
      sudo systemctl disable pangolin-pooler
      sudo systemctl stop pangolin-certs-rotate
      sudo systemctl disable pangolin-certs-rotate
      sudo systemctl stop pangolin-auth-reencrypt@postgres
      sudo systemctl stop pangolin-auth-reencrypt@kmadmin_pg
    • С функциональностью «Отказ от root»:

      # (опционально) Для конфигурации с etcd
      sudo systemctl stop etcd
      sudo -iu postgres

      # (опционально) Для конфигурации с pangolin-manager
      systemctl --user stop pangolin-manager
      systemctl --user disable pangolin-manager

      # (опционально) Для конфигурации без pangolin-manager
      systemctl --user stop postgresql

      # Для любой конфигурации
      systemctl --user stop pangolin-pooler
      systemctl --user disable pangolin-pooler
      systemctl --user stop pangolin-certs-rotate
      systemctl --user disable pangolin-certs-rotate
      systemctl --user stop pangolin-auth-reencrypt
      exit
      sudo -iu kmadmin_pg
      export XDG_RUNTIME_DIR=/run/user/$(id -u)
      export BUGS_SESSION_BUS_ADRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
      systemctl --user stop pangolin-auth-reencrypt
      exit
  3. Проверьте, что все компоненты корректно остановлены:

    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|postgresql|pangolin-certs-rotate|pangolin-auth-reencrypt@postgres|pangolin-auth-reencrypt@kmadmin_pg|etcd" | grep -v grep

    Если команда вернула не пустой результат, выполните команду:

    sudo kill -9 <pid>
    sudo ps aux | grep -E "pangolin-pooler|pangolin-manager|postgresql|pangolin-certs-rotate|pangolin-auth-reencrypt@postgres|pangolin-auth-reencrypt@kmadmin_pg|etcd" | grep -v grep
  4. (Опционально) Для конфигурации с etcd. Создайте резервную копию рабочих файлов etcd:

    sudo mkdir -p ~/pangolin_astrase17/{etcd_backup_lib,etcd_backup_conf}
    sudo cp -ra /var/lib/etcd ~/pangolin_astrase17/etcd_backup_lib/
    sudo cp -ra /etc/etcd ~/pangolin_astrase17/etcd_backup_conf/
  5. Проверьте версию GNU libc с помощью команды:

     ldd --version

    Пример вывода команды:

    ldd (GNU libc) 2.28
    Copyright (C) 2018 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
    Written by Roland McGrath and Ulrich Drepper.

    Если версия GNU libc меньше 2.28, то после обновления ОС и восстановления работы продукта выполните «Шаг 4».

Шаг 2. Обновление ОС

  1. Обновите ОС Astra 1.7 до Astra 1.8:

    Миграция на новую ОС осуществляется с помощью инструмента astra-full-upgrade. Для успешного выполнения миграции требуется наличие неразмеченного свободного непрерывного дискового пространства, не менее 60 Гб (ориентируйтесь на занятое пространство директорией /pgdata). Чтобы создать это пространство, для обычного КТС с диском 60 Гб нужно добавить неразмеченную область дополнительно на 60 Гб. При миграции на очередное обновление все имеющиеся дисковые разделы старой ОС, кроме /home, /boot и /swap, будут созданы заново в неразмеченном свободном пространстве.

    Если на ОС был установлен Python 3.11, нужно откатить на версию 3.7 для корректной работы обновленной версии ОС:

    • Скачайте Python 3.7:

      sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 10
    • Откатите версию Python на 3.7:

      sudo update-alternatives --config python3 #Выбрать 3.7
    • Установите старый pip:

      sudo apt reinstall python3-pip && python3.7 -m pip install --upgrade pip==21.2
    • Обновите setuptools:

      pip3 install setuptools
    • Установите пакет PyQt5:

      pip3 install PyQt5
    • Повторите установку pip, обновление setuptools и установку пакета PyQt5 для пользователя root, чтобы предотвратить возникновение ошибки на этапе запуска утилиты astra-full-upgrade.

  2. Установите утилиты:

    sudo apt install -y astra-full-upgrade astra-console-upgrade

    Для обновления потребуется astra-console-upgrade, но ключ проверки есть только у astra-full-upgrade.

  3. Настройте конфигурационный файл /usr/lib/python3/dist-packages/astra_upgrade/configs/upgrade.conf.yaml, пропишите в нем репозитории для обновления. Пример заполненного файла конфигурации:

    # Настройки обновления
    target_repos: # Настройки источников пакетов
    sources: # Список репозиториев (как сетевых так и локальных), используемых для обновления
    - 'deb http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/main-repository/ 1.8_x86-64 main contrib non-free'
    - 'deb http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/extended-repository/ 1.8_x86-64 main contrib non-free'
    dirs: # Список директорий с пакетами, из которых будут созданы локальные репозитории, которые также будут использоваться для обновления.
    - '/opt/repo'
    sources_list: all # all | disable | third_party | astra

    base_system_install: # Настройки установки базовой системы
    source: debootstrap # Тип источника установки. Возможные варианты: debootstrap | archive | images. Исходя из выбранного варианта установки, будут использоваться соответствующие настройки, при этом настройки для других типов источников будут проигнорированы.
    debootstrap: # Настройки для варианта установки с использованием debootstrap (source: debootstrap)
    repo: http://repo.example.example/trusted_repo/astra/download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.1/uu/1/main-repository/ # Репозиторий из которого должен быть проведен debootstrap.
    use_disk: false # Установить в true, если требуется установка с диска. При установке с диска, указывать репозиторий (параметр repo) не требуется.
    mountpoint: /run/live/medium # Точка для монтирования диска
    images: # Список образов для варианта установки с использованием заранее подготовленных образов системы (source: images).
    - <path to rootfs image>/rootfs.img
    archive: <path to rootfs archive>/rootfs.tar.gz # Путь к архиву для варианта установки путем распаковки заранее подготовленного архива (source: archive).

    packages: # Настройки установки и верификации пакетов
    # critical: # Список пакетов, которые отсутствуют в исходной системе, но должны быть установлены в целевую систему при обновлении
    # - lvm2
    # - cryptsetup
    # - plymouth-astra-theme

    # whitelist: # Список сторонних пакетов, которые установлены в исходной системе и должны быть перенесены в целевую систему при обновлении
    # - code

    target_kernel_version: 'auto' # Выбор ядра, которое должно быть установлено в целевую систему при обновлении. Используйте значение 'auto' - для автоматического выбора последней доступной версии ядра.
    allow_third_party: true # Установить в false, чтобы запретить перенос всех установленных в исходной системе сторонних пакетов
    check_gpg: true # Установить в false, чтобы отключить проверку gpg-ключей репозиториев для пакетов из состава AstraLinux.

    # removed: # Список пакетов, которые установлены в исходной системе, но не должны быть перенесены в целевую систему при обновлении.
    # - name

    # predefined_versions: # Список пакетов, для которых в целевую систему должна быть установлена указанная версия в принудительном порядке
    # package_name: version

    # Путь к директории - точке монтирования устройства/раздела, которое будет использовано при проведении обновления.
    target_path: '/target'

    # Путь к директории, в которой хранится отчет и прочие файлы, генерируемые в процессе обновления
    report_path: '/var/cache/astra-upgrade'

    download: # Настройки параметров загрузки пакетов
    path: '/var/cache/astra-upgrade/download' # Путь к директории, в которую будет производиться загрузка пакетов
    keep: true # Установить в false, чтобы удалять загруженные пакеты при аварийном откате и откате с использованием команды set ready-for-download.
    check_time: 60 # Временной интервал между проверками на наличие изменений в составе пакетов исходной системы. Используется только в случае, если нет возможности отслеживать кеш пакетов. Задается в секундах.
    max_delay: 240 # Максимальное значение отсрочки загрузки пакетов, задается в минутах.
    retry_count: 3 # Количество повторных попыток загрузки при ошибках загрузки. Установить значение равным -1 для снятия ограничения.
    retry_delay: 30 # Временной интервал между повторными попытками загрузки, задается в секундах.

    # Срок (в днях), через который текущая система перейдет в режим принудительного обновления при перезагрузке. Отсчет начинается с момента завершения загрузки пакетов.
    max_upgrade_delay: 7 # in days

    # Установить в true, чтобы игнорировать данные предыдущего отчета (если он имеется) при проведении проверок системы
    ignore_prev_report: false

    # Настройки разметки
    target_fs_size_policy: 'auto' # Политика использования свободного места на устройстве/разделе, которое будет использовано при проведении обновления. Возможные варианты: 'auto', 'minimal', 'maximum'
    target_fs_minimal_reserve: 1000 # Размер дополнительного дискового пространства, резервируемого под рост ОС. Задается в Мб
    target_fs_snapshot_reserve: 5000 # Размер дополнительно дискового пространства, резервируемого под создание снепшотов
    target_rootfs_size: 'auto' # Размер дискового пространства, выделяемого под корневую файловую систему. Может быть вычислен динамически ('auto'), также можно указать вручную в Мб.
    backup_path: '/backup_1.7' # Путь до директории, в которой будет храниться копия старой системы
    dummydisk_path: '/' # Путь до фиктивного диска для loop устройств

    # Управление шаблоном разметки
    partitioning_template:
    not_rebuild: false # Выставить в true, если нужно использовать скорректированный шаблон разметки из предыдущего отчета.
    # use_existing: /dev/mapper/astra--VG-root # Использовать существующий раздел под корневую файловую систему целевой системы. При использовании этой опции настройки разметки игнорируются

    # Управление настройками безопасности
    security_settings:
    enable_overlay: false # Выставить в true, чтобы включить astra-overlay после обновления системы
  4. Проверьте систему на соответствие требованиям с формированием отчета:

    sudo astra-full-upgrade check
  5. Для выполнения миграции Astra Linux 1.7 на 1.8 выполните команду:

    sudo astra-console-upgrade --force

    После обновления стенда поменяйте сетевой интерфейс на хостах в /etc/network/interfaces.

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

    sudo cat /etc/os-release

    Пример вывода команды:

    PRETTY_NAME="Astra Linux"
    NAME="Astra Linux"
    ID=astra
    ID_LIKE=debian
    ANSI_COLOR="1;31"
    HOME_URL="https://astralinux.ru"
    SUPPORT_URL="https://astralinux.ru/support"
    LOGO=astra
    VERSION_ID=1.8_x86-64
    VERSION_CODENAME=1.8_x86-64

Шаг 3. Восстановление работы СУБД Pangolin

  1. Обновите deb-пакеты СУБД Pangolin:

    Для Astra критична guid/uuid, поэтому следует использовать guid и uuid при установке пакетов pangolin-dbms-6.5, что использовался раннее.

    # (опционально) Для любой конфигурации
    # В примере используется POSTGRES_GROUP_GUID=128
    sudo POSTGRES_GROUP_GUID=128 apt install -y ~/pangolin_astrase18/pangolin-dbms-6.5_6.5.2_amd64.deb &&\
    sudo POSTGRES_GROUP_GUID=128 apt install -y ~/pangolin_astrase18/pangolin-dbms-6.5-client_6.5.2_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/pangolin-pooler_1.5.0_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/pangolin-backup-tools_1.2.4_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-auth-reencrypt_6.5.2_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-certs-rotate_6.5.2_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-diagnostic-tool_6.5.2_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/utilities/pangolin-security-utilities_6.5.2_amd64.deb &&\
    sudo apt install -y ~/pangolin_astrase18/timescaledb/pangolin-timescaledb-6.5-apache_2.14.2_amd64.deb

    # (опционально) Для конфигурации с pangolin-manager
    tar -xzvf ~/pangolin_astrase18/3rdparty/3rdparty.tar.gz -C ~/pangolin_astrase18/3rdparty &&\
    sudo apt install -y ./pangolin_astrase18/3rdparty/pangolin-manager-venv/pangolin-manager-venv_1.1.0_amd64.deb &&\
    sudo apt install -y ./pangolin_astrase18/pangolin-manager_2.1.8_amd64.deb

    Список переменных, возможных для использования при установке пакетов:

    ПеременнаяОписаниеЗначение по умолчаниюПример использования
    POSTGRES_USER_GUIDПеременная отвечающая за создание пользователя postgres с конкретным uid26POSTGRES_USER_GUID=27 dnf install pangolin-dmbs
    POSTGRES_GROUP_GUIDПеременная отвечающая за создание группы пользователя postgres с конкретным gid26POSTGRES_GROUP_GUID=27 dnf install pangolin-dbms
    PANGOLIN_USERS_GROUP_GUIDПеременная отвечающая за создание группы pangolin_users с конкретным gid226PANGOLIN_USERS_GROUP_GUID=227 dnf install pangolin-dbms
    KMADMIN_PG_USER_GUIDПеременная отвечающая за создание пользователя kmadmin_pg с конкретным uid126KMADMIN_PG_USER_GUID=127 dnf install pangolin-dmbs
    KMADMIN_PG_GROUP_GUIDПеременная отвечающая за создание группы пользователя kmadmin_pg с конкретным gid126KMADMIN_PG_GROUP_GUID=127 dnf install pangolin-dbms
  2. (опционально) Восстановите основные каталоги продукта:

    sudo cp -rf /oldroot/opt/pangolin_license /opt/
    sudo chown postgres:postgres -R /opt/pangolin_license
    ----
    sudo cp -rf /oldroot/pgdata /
    sudo cp -rf /oldroot/pgerrorlogs /
    sudo chown postgres:postgres -R /pgdata /pgerrorlogs
    ----
    sudo cp -rf /oldroot/etc/pangolin-manager /etc/
    sudo cp -rf /oldroot/etc/pangolin-auth-encryption /etc/
    sudo chown postgres:postgres -R /etc/pangolin-manager /etc/pangolin-auth-encryption
    ----
    sudo cp -rf /oldroot/home/postgres/.profile /home/postgres/
    sudo chown postgres:postgres /home/postgres/.profile
  3. (опционально) Восстановите etcd:

    sudo rm -rf /var/lib/etcd /etc/etcd
    sudo cp -ra ~/pangolin_astrase17/etcd_backup_lib/etcd /var/lib/
    sudo cp -ra ~/pangolin_astrase17/etcd_backup_conf/etcd /etc/
  4. Настройте локали для запуска восстановленной СУБД:

    По умолчанию локаль ru_RU.UTF-8 - не установлена, поэтому необходимо выполнить изменения в postgresql.base.conf из /pgdata/06/data:

    # Замените значения по умолчанию
    < lc_monetary = 'ru_RU.UTF-8' # locale for monetary formatting
    < lc_numeric = 'ru_RU.UTF-8' # locale for number formatting
    < lc_time = 'ru_RU.UTF-8' # locale for time formatting
    ---
    # На новые значения
    > lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
    > lc_numeric = 'en_US.UTF-8' # locale for number formatting
    > lc_time = 'en_US.UTF-8' # locale for time formatting

    Ошибка, возникающая при запуске СУБД, если не исправить данную ошибку:

    2025-05-06 14:10:48.430 GMT [19314] LOG:  invalid value for parameter "lc_monetary": "ru_RU.UTF-8"
    2025-05-06 14:10:48.430 GMT [19314] LOG: invalid value for parameter "lc_numeric": "ru_RU.UTF-8"
    2025-05-06 14:10:48.430 GMT [19314] LOG: invalid value for parameter "lc_time": "ru_RU.UTF-8"
    2025-05-06 17:10:48 MSK [19314]: [8-1] app=,user=,db=,client=,type=postmaster FATAL: configuration file "/pgdata/06/data/postgresql.base.conf" contains errors
  5. Запустите компоненты СУБД Pangolin:

    Важно

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

    • Без функциональности «Отказ от root»:

      # (опционально) Для конфигурации с pangolin-manager
      sudo systemctl restart pangolin-manager
      sudo systemctl enable pangolin-manager

      # (опционально) Для конфигурации без pangolin-manager
      sudo systemctl restart postgresql

      # (опционально) Для конфигурации с etcd
      sudo systemctl restart etcd

      # (опционально) Для конфигурации с dcs. Только для узла arbiter.
      sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so
      sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins
      sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so

      # (опционально) Для любой конфигурации
      sudo systemctl restart pangolin-pooler
      sudo systemctl enable pangolin-pooler
      sudo systemctl restart pangolin-certs-rotate
      sudo systemctl enable pangolin-certs-rotate
      sudo systemctl restart pangolin-auth-reencrypt@postgres
      sudo systemctl restart pangolin-auth-reencrypt@kmadmin_pg
    • С функциональностью «Отказ от root»:

      sudo -iu postgres

      # (опционально) Для конфигурации с pangolin-manager
      systemctl --user restart pangolin-manager
      systemctl --user enable pangolin-manager

      # (опционально) Для конфигурации без pangolin-manager
      systemctl --user restart postgresql

      # (опционально) Для конфигурации с etcd
      exit
      systemctl restart etcd

      # Для любой конфигурации
      sudo -iu postgres
      systemctl --user restart pangolin-pooler
      systemctl --user enable pangolin-pooler
      systemctl --user restart pangolin-certs-rotate
      systemctl --user enable pangolin-certs-rotate
      systemctl --user restart pangolin-auth-reencrypt
      exit

      # (опционально) Для конфигурации с dcs. Только для узла arbiter.
      sudo chmod -R 0440 /opt/pangolin-manager/lib/plugins/ /opt/pangolin-manager/lib/libfe_elog.so
      sudo chmod 0770 /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins
      sudo chown postgres:pangolin_users /opt/pangolin-manager /opt/pangolin-manager/bin /opt/pangolin-manager/lib /opt/pangolin-manager/lib/plugins /opt/pangolin-manager/lib/libfe_elog.so

      # Для любой конфигурации
      sudo -iu kmadmin_pg
      export XDG_RUNTIME_DIR=/run/user/$(id -u)
      export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
      systemctl --user restart pangolin-auth-reencrypt
      exit
  6. (Опционально) Для конфигурации с Pangolin Manager. Выведите компонент из режима паузы:

    sudo -iu postgres
    pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml edit-config --set 'pause=false' --force
    exit
  7. Перестройте все объекты баз данных, которые используют параметры сортировки по умолчанию:

    sudo -iu postgres
    psql
    DO $$
    DECLARE
    db_name TEXT;
    BEGIN
    FOR db_name IN (SELECT datname FROM pg_database WHERE datname NOT IN ('template0','template1')) LOOP
    EXECUTE format('ALTER DATABASE %I REFRESH COLLATION VERSION', db_name);
    END LOOP;
    END $$;
    \q
    exit
  8. Проверьте корректность запуска компонентов:

    • Без функциональности «Отказ от root»:

      # (опционально) Для конфигурации с pangolin-manager
      sudo systemctl status pangolin-manager

      # (опционально) Для конфигурации без pangolin-manager
      sudo systemctl status postgresql

      # (опционально) Для конфигурации с etcd
      sudo systemctl status etcd

      # (опционально) Для любой конфигурации
      sudo systemctl status pangolin-pooler
      sudo systemctl status pangolin-certs-rotate
      sudo systemctl status pangolin-auth-reencrypt@postgres
      sudo systemctl status pangolin-auth-reencrypt@kmadmin_pg
    • С функциональностью «Отказ от root»:

      sudo -iu postgres

      # (опционально) Для конфигурации с pangolin-manager
      systemctl --user status pangolin-manager

      # (опционально) Для конфигурации без pangolin-manager
      systemctl --user status postgresql

      # (опционально) Для конфигурации с etcd
      exit
      sudo systemctl status etcd

      # (опционально) Для любой конфигурации
      sudo -iu postgres
      systemctl --user status pangolin-pooler
      systemctl --user status pangolin-certs-rotate
      systemctl --user status pangolin-auth-reencrypt
      exit
      sudo -iu kmadmin_pg
      export XDG_RUNTIME_DIR=/run/user/$(id -u)
      export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
      systemctl --user status pangolin-auth-reencrypt
      exit
  9. Проверьте корректность ролевой модели master-replica:

    sudo -iu postgres
    list

    Пример вывода команды:

     Cluster: clustername (7459378915757009619) --------+--------------+-----------+----+-----------+
    | Member | Host | Role | State | TL | Lag in MB |
    ----------------------+----------------------------+--------------+-----------+----+-----------+
    | <server_name> | <server_name>:<port> | Leader | running | 3 | |
    | <server_name> | <server_name>:<port> | Sync Standby | streaming | 3 | 0 |

    Если роли распределились некорректно, выполните переключение:

    switch

Шаг 4. Перестройка индексов до запуска пользовательской нагрузки

  1. Создайте файл скрипта с содержимым:

    read -s -p "Введите пароль: " pass
    echo
    echo

    # Получаем список баз данных
    dblist=$(PGPASSWORD=$pass psql -t -c "select string_agg(datname, ' ') from
    pg_database where datname not in ('template0','template1');")
    for i in $dblist
    do

    # Получаем список индексов в БД
    dbidx=$(PGPASSWORD=$pass psql -d $i -t -c "\
    SELECT DISTINCT indexrelid::regclass::text idx_name \
    FROM (SELECT indexrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s \
    JOIN pg_collation c ON coll=c.oid \
    WHERE c.collprovider IN ('d', 'c') AND c.collname NOT IN ('C', 'POSIX') \
    and indexrelid not in (SELECT distinct inhparent FROM pg_inherits);")
    echo "Текущая БД : $i"

    # Выполняем REINDEX для индексов
    for j in $dbidx
    do
    echo "Текущий обрабатываемый индекс : reindex index concurrently $j;"
    PGPASSWORD=$pass psql -d $i -c "reindex index concurrently $j;"
    done
    echo "------------------------------"
    done
  2. Измените права для скрипта:

    chmod 744 <название_файла_со_скриптом>
  3. Перенастройте индексы с помощью скрипта:

    Важно

    Для корректного исполнения скрипта понадобится пароль от пользователя базы данных.

    ./<название_файла_со_скриптом>

    Пример работы скрипта:

    Введите пароль:
    Текущая БД : postgres
    Текущий обрабатываемый индекс : reindex index concurrently cron.jobname_username_uniq;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently hint_plan.hints_norm_and_app;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently outline.outlines_pkey;
    REINDEX
    ------------------------------
    Текущая БД : First_db
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_baselines;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_stat_tables_tot;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_report_struct;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_sample_stmts_qid;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_import_queries_version_order;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_fk_report_struct_tree;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.ix_sample_kcache_sl;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_sample_we;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_report_headers;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.uk_sample_settings_sysid;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently outline.outlines_pkey;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_import_queries;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_settings;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_sample_timings;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently pgse_profile.pk_stmt_list;
    REINDEX
    Текущий обрабатываемый индекс : reindex index concurrently hint_plan.hints_norm_and_app;
    REINDEX
    ------------------------------

Проверка результатов восстановления

Для проверки корректности работы СУБД рекомендуется использовать чек-лист проверки корректности работы.