Перейти к содержанию

Обновление версии PostgreSQL для GNU/Linux

Данная страница является дополнением к инструкции по установке на GNU/Linux и поможет обновить используемую в сканере систему управления базами данных PostgreSQL до версии 16, содержащей необходимое для корректной работы сервиса расширение TimescaleDB. Если версия PostgreSQL соответствует требуемой, необходимо только установить расширение, если оно не установлено.

Список затрагиваемых версий

Инструкцию необходимо проделать при обновлении сканера с версии v25.9 и старше на версию v25.10 и новее.

Миграция

Примечание

  • В предлагаемой инструкции миграция осуществляется с помощью встроенной в PostgresQL команды pg_dump. Допускаются другие способы обновления, не указанные в инструкции.
  • Все команды в инструкции запускаются пользователем с ролью «администратор».
  • При установке на Astra Linux команды pg_dump, dropdb, psql должен выполнять пользователь с ролью postgres. Для этого используется префикс вида sudo -u postgres.
  1. Назначьте директорию для сохранения резервных копий

    sudo mkdir -p /var/backups/pg && sudo chown postgres:postgres /var/backups/pg
    
  2. Создайте копию базы данных solidpoint_backend.

    pg_dump -U postgres solidpoint_backend > /var/backups/pg/backend_dump.sql
    
  3. Создайте копию базы данных fuchsia.

    pg_dump -U postgres fuchsia > /var/backups/pg/fuchsiad_dump.sql
    
  4. Удалите базу данных solidpoint_backend.

    dropdb -U postgres solidpoint_backend
    
  5. Удалите базу данных fuchsia.

    dropdb -U postgres fuchsia
    
  6. Обновите версию PostgreSQL до необходимой.

    1. Остановите старый кластер.

      systemctl stop postgresql
      
    2. Обновите пакеты.

      apt update
      apt upgrade
      apt install postgresql-16
      
    3. Определите старую и новую версию PostgreSQL, а также имя кластера.

      pg_lsclusters
      
    4. Используйте утилиту pg_upgrade.

      pg_upgradecluster <старая_версия> <имя_кластера>
      
    5. Запустите новый кластер.

      systemctl start postgresql
      
    6. Удалите старый кластер.

      pg_dropcluster <старая_версия> <имя_кластера>
      
  7. Заново создайте удалённые базы данных.

    su postgres -c psql
    > CREATE DATABASE solidpoint_backend;
    > CREATE USER backend WITH PASSWORD '${POSTGRESQL_PASSWORD}';
    > GRANT ALL PRIVILEGES ON DATABASE solidpoint_backend TO backend;
    > \c solidpoint_backend;
    > GRANT ALL ON SCHEMA public TO backend;
    > CREATE DATABASE fuchsia;
    > CREATE USER fuchsia WITH PASSWORD '${POSTGRESQL_PASSWORD}';
    > GRANT ALL PRIVILEGES ON DATABASE fuchsia TO fuchsia;
    > \c fuchsia;
    > GRANT ALL ON SCHEMA public TO fuchsia;
    > quit
    
  8. Импортируйте копию базы данных solidpoint_backend.

    psql -U postgres -d solidpoint_backend < backend_dump.sql
    
  9. Импортируйте копию базы данных fuchsia.

    psql -U postgres -d fuchsia < fuchsiad_dump.sql
    
  10. Перезапустите PostgreSQL.

    systemctl restart postgresql
    
  1. Назначьте директорию для сохранения резервных копий

    sudo mkdir -p /var/backups/pg && sudo chown postgres:postgres /var/backups/pg
    
  2. Создайте копию базы данных solidpoint_backend.

    sudo -u postgres pg_dump solidpoint_backend > /var/backups/pg/backend_dump.sql
    
  3. Создайте копию базы данных fuchsia.

    sudo -u postgres pg_dump fuchsia > /var/backups/pg/fuchsiad_dump.sql
    
  4. Удалите базу данных solidpoint_backend.

    sudo -u postgres dropdb solidpoint_backend
    
  5. Удалите базу данных fuchsia.

    sudo -u postgres dropdb fuchsia
    
  6. Обновите версию PostgreSQL до необходимой.

    1. Остановите старый кластер.

      systemctl stop postgresql
      
    2. Обновите пакеты.

      apt update
      apt install postgresql-16
      
    3. Определите старую и новую версию PostgreSQL, а также имя кластера.

      pg_lsclusters
      
    4. Используйте утилиту pg_upgrade.

      pg_upgradecluster <старая_версия> <имя_кластера>
      
    5. Закомментируйте неподдерживаемые конфигурационные параметры.

      sed -i '/^[[:space:]]*ac_/ s/^/#/' /etc/postgresql/16/main/postgresql.conf
      sed -iE '/^[[:space:]]*MAC[[:space:]]/ s/^/-- /' backend_dump.sql
      sed -iE '/^[[:space:]]*MAC[[:space:]]/ s/^/-- /' fuchsiad_dump.sql
      
    6. Запустите новый кластер.

      systemctl start postgresql
      
    7. Удалите старый кластер.

      pg_dropcluster <старая_версия> <имя_кластера>
      
  7. Заново создайте удалённые базы данных.

    su postgres -c psql
    > CREATE DATABASE solidpoint_backend;
    > CREATE USER backend WITH PASSWORD '${POSTGRESQL_PASSWORD}';
    > GRANT ALL PRIVILEGES ON DATABASE solidpoint_backend TO backend;
    > \c solidpoint_backend;
    > GRANT ALL ON SCHEMA public TO backend;
    > CREATE DATABASE fuchsia;
    > CREATE USER fuchsia WITH PASSWORD '${POSTGRESQL_PASSWORD}';
    > GRANT ALL PRIVILEGES ON DATABASE fuchsia TO fuchsia;
    > \c fuchsia;
    > GRANT ALL ON SCHEMA public TO fuchsia;
    > quit
    
  8. Импортируйте копию базы данных solidpoint_backend.

    sudo -u postgres psql -d solidpoint_backend < backend_dump.sql
    
  9. Импортируйте копию базы данных fuchsia.

    sudo -u postgres psql -d fuchsia < fuchsiad_dump.sql
    
  10. При установке на Astra Linux убедитесь, что в файле /etc/postgresql/16/main/postgresql.conf в качестве номера порта указано значение 5432 (если это не так, установите значение 5432).

  11. Перезапустите PostgreSQL.

    systemctl restart postgresql
    

Известные проблемы

Ошибка команды pg_upgradecluster, связанная c локалями

Пример:

root@astra:~# pg_upgradecluster 15 main
Upgrading cluster 15/main to 16/main ...
Stopping old cluster...
Restarting old cluster with restricted connections...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for start operation
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_ADDRESS = "en_GB.UTF-8",
LC_NAME = "en_GB.UTF-8",
LC_MONETARY = "en_GB.UTF-8",
LC_PAPER = "en_GB.UTF-8",
LC_IDENTIFICATION = "en_GB.UTF-8",
LC_TELEPHONE = "en_GB.UTF-8",
LC_MEASUREMENT = "en_GB.UTF-8",
LC_TIME = "en_GB.UTF-8",
LC_NUMERIC = "en_GB.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Error: The locale requested by the environment is invalid:
LANG: en_US.UTF-8
LC_ADDRESS: en_GB.UTF-8
LC_IDENTIFICATION: en_GB.UTF-8
LC_MEASUREMENT: en_GB.UTF-8
LC_MONETARY: en_GB.UTF-8
LC_NAME: en_GB.UTF-8
LC_NUMERIC: en_GB.UTF-8
LC_PAPER: en_GB.UTF-8
LC_TELEPHONE: en_GB.UTF-8
LC_TIME: en_GB.UTF-8
Error: Could not create target cluster

Решение:

  1. Используйте команды:

    apt install -y locales
    dpkg-reconfigure locales
    
  2. В открывшемся окне выберите en_GB.UTF-8 UTF-8, нажав на пробел.

Ошибка команды pg_upgradecluster, связанная c конфигурационными параметрами

Пример:

Error: /usr/lib/postgresql/16/bin/pg_ctl /usr/lib/postgresql/16/bin/pg_ctl start -D /var/lib/postgresql/16/main -l /var/log/postgresql/postgresql-16-main.log -s -o  -c config_file="/etc/postgresql/16/main/postgresql.conf" -c hba_file=/tmp/pg_hba.JThoYx.conf exited with status 1:
2025-09-06 16:07:18.871 GMT [335627] LOG:  unrecognized configuration parameter "ac_enable_maclabels_on_files" in file "/etc/postgresql/16/main/postgresql.conf" line 38
2025-09-06 16:07:18.871 GMT [335627] LOG:  unrecognized configuration parameter "ac_ignore_maclabel" in file "/etc/postgresql/16/main/postgresql.conf" line 39

Решение:

  1. Используйте команду:

    nano /etc/postgresql/16/main/postgresql.conf
    
  2. Закомментируйте все параметры, начинающиеся на ac_, используя символ # перед такими параметрами.

  3. Сохранившись, выйдите из файла.
  4. Запустите кластер

    pg_ctlcluster 16 main start
    
  5. Проверьте состояние кластера

    pg_lsclusters