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

Обновление PostgreSQL

Процедура обновления

Внимание!

Существует риск потери данных в момент обновления БД. Процедуру обновления рекомендуется выполнять во время минимальной пользовательской активности или остановки всех сервисов. Настоятельно рекомендуется сделать бэкап базы данных.


Перед обновлением встроенной БД:

  1. Убедитесь в наличии свободного места на диске.

    Для обновления требуется дисковое пространство, равное по размеру существующей базе. Текущий размер базы можно узнать с помощью команды:

    docker system df -v | grep postgres_data
    
  2. Уточните текущую версию PostgreSQL.

    Если после обновления возникнут ошибки, может потребоваться откат версии PostgreSQL. Поэтому желательно знать, на какой версии БД работала до обновления. Важно выполнить команду вывода текущей версии БД до обновления образа PostgreSQL:

    DEPLOYKA_SKIP_UPDATE=true dpl --dc exec postgres cat /var/lib/postgresql/data/PG_VERSION
    
  3. Убедитесь, что имеется доступ к apt.postgresql.org. Доступ требуется для загрузки исполняемых файлов старой версии. При отсутствии доступа см. раздел "Обновление без доступа к apt.postgresql.org".


Для обновления БД:

  1. В конец файла settings.yaml добавьте настройку, запускающую обновление контейнера БД при старте:

    postgres_upgrade: true
    

    Примечание

    Если данной настройки не будет, новые версии образа PostgreSQL при запуске будут выдавать ошибку "postgres_upgrade disabled, exiting".

  2. Выполните обновление образа PostgreSQL и его запуск с помощью команды:

    dpl -d postgres
    
  3. Для отслеживания процесса обновления в логах используйте команду:

    dpl --dc logs -f --tail=1 postgres
    

    Когда обновление будет закончено, в логах появится сообщение:

    DB upgrade is done, please disable postgres_upgrade in the settings
    
  4. Отключите настройку postgres_upgrade, иначе контейнер с PostgreSQL не запустится.

  5. Уберите настройку postgres_upgrade и загрузите стандартный образ с помощью команды:

    DEPLOYKA_SKIP_UPDATE=true dpl -d postgres
    

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

Если версию БД по каким-то причинам нужно оставить без изменений, остаются доступны образы postgres без скрипта обновления. Их можно включить через параметр images, например:

images:
    postgres: postgres:9.5.24


Резервная копия

После обновления базы старая версия сохраняется для возможности отката версии. Копия расположена в том же volume, который использует контейнер postgres, в директории с именем upgrade_backup_<timestamp>.

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

DEPLOYKA_SKIP_UPDATE=true dpl --dc exec postgres find /var/lib/postgresql/data -type d -name upgrade_backup_* -exec rm -r {} \;


Откат версии

Чтобы откатить версию базы, нужно перенести файлы из директории с резервной копией в директорию уровнем выше.

Для работы с файловой системой volume запустите временный контейнер:

DEPLOYKA_SKIP_UPDATE=true dpl --dc run --rm --entrypoint=/bin/bash postgres

Или выполните операцию непосредственно с хоста. Docker volumes обычно хранятся в /var/lib/docker/volumes.

После переноса файлов выставите образ postgres предыдущей версии в файле в settings.yaml, например:

images:
  postgres: postgres:9.5.24


Обновление без доступа к apt.postgresql.org

Для обновления без доступа к apt.postgresql.org собран специальный образ 14.4-from-9.5.

Примечание

Поддерживается только обновление с версии 9.5.

Для обновления БД до версии 14.4:

  1. В файл settings.yaml добавьте секцию images с соответствующим тегом:

    images:
        postgres: postgres:14.4-from-9.5
    
  2. В конец файла settings.yaml добавьте настройку, запускающую обновление контейнера БД при старте:

    postgres_upgrade: true
    

    Примечание

    Если данной настройки не будет, новые версии образа PostgreSQL при запуске будут выдавать ошибку "postgres_upgrade disabled, exiting".

  3. Выполните обновление образа PostgreSQL и его запуск с помощью команды:

    dpl -d postgres
    
  4. Чтобы отследить процесс обновления в логах, используйте команду:

    dpl --dc logs -f --tail=1 postgres
    

    Когда обновление будет закончено, в логах появится сообщение:

    DB upgrade is done, please disable postgres_upgrade in the settings
    
  5. Уберите настройку postgres_upgrade и загрузите стандартный образ с помощью команды:

    DEPLOYKA_SKIP_UPDATE=true dpl -d postgres