Успешный цикл обновления Postgres из-за предыдущей миграции с версии 8 на 10

В цикле:

Для завершения обновления выполните сборку повторно, используя: ./launcher rebuild app

Должно быть, я что-то упускаю. Полный лог ниже. Буду признателен за любую помощь.

root@discuss:/var/discourse# ./launcher rebuild app
Проверка актуальности launcher
Получение origin
Launcher актуален
Остановка старого контейнера
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Уже актуально.
I, [2020-05-26T20:43:00.459915 #1]  INFO -- : Загрузка --stdin
I, [2020-05-26T20:43:00.466076 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-05-26T20:43:00.497010 #1]  INFO -- : Генерация локалей (это может занять время)...
Генерация завершена.

I, [2020-05-26T20:43:00.497661 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-05-26T20:43:00.500629 #1]  INFO -- :
I, [2020-05-26T20:43:00.501124 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-05-26T20:43:00.503417 #1]  INFO -- :
I, [2020-05-26T20:43:00.503867 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-05-26T20:43:00.505796 #1]  INFO -- :
I, [2020-05-26T20:43:00.506199 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-05-26T20:43:00.508341 #1]  INFO -- :
I, [2020-05-26T20:43:00.508752 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-05-26T20:43:00.510785 #1]  INFO -- :
I, [2020-05-26T20:43:00.511166 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres уже запущен, остановите контейнер ; exit 1
2020/05/26 20:43:00 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Нет такого файла или каталога
I, [2020-05-26T20:43:00.515245 #1]  INFO -- :
I, [2020-05-26T20:43:00.515542 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-05-26T20:43:00.518166 #1]  INFO -- :
I, [2020-05-26T20:43:00.518509 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-05-26T20:43:00.520876 #1]  INFO -- :
I, [2020-05-26T20:43:00.521215 #1]  INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.523438 #1]  INFO -- :
I, [2020-05-26T20:43:00.523931 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.526034 #1]  INFO -- :
I, [2020-05-26T20:43:00.530519 #1]  INFO -- : Файл > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.534602 #1]  INFO -- : Файл > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.538528 #1]  INFO -- : Файл > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542481 #1]  INFO -- : Файл > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542896 #1]  INFO -- : > chown -R root /var/lib/postgresql/12/main
I, [2020-05-26T20:43:00.638174 #1]  INFO -- :
I, [2020-05-26T20:43:00.638520 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-05-26T20:43:00.640938 #1]  INFO -- :
I, [2020-05-26T20:43:00.641292 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-05-26T20:43:00.672801 #1]  INFO -- :
I, [2020-05-26T20:43:00.673456 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-05-26T20:43:00.676098 #1]  INFO -- :
I, [2020-05-26T20:43:00.676587 #1]  INFO -- : > /root/upgrade_postgres
initdb: предупреждение: включена аутентификация «trust» для локальных подключений
Вы можете изменить это, отредактировав pg_hba.conf или используя опцию -A, или
--auth-local и --auth-host при следующем запуске initdb.
debconf: откладывание конфигурации пакета, так как apt-utils не установлен
mv: не удалось переместить «/shared/postgres_data» в «/shared/postgres_data_old/postgres_data»: Каталог не пуст
mv: не удалось переместить «/shared/postgres_data_new» в «/shared/postgres_data/postgres_data_new»: Каталог не пуст
I, [2020-05-26T20:43:15.530374 #1]  INFO -- : Обновление PostgreSQL с версии 10 до 12
Файлы, принадлежащие этой системе баз данных, будут принадлежать пользователю «postgres».
Этот пользователь также должен владеть процессом сервера.

Кластер баз данных будет инициализирован с локалью «en_US.UTF-8».
Кодировка базы данных по умолчанию соответственно установлена в «UTF8».
Конфигурация поиска текста по умолчанию будет установлена в «english».

Контрольные суммы страниц данных отключены.

Исправление прав доступа в существующем каталоге /shared/postgres_data_new ... ok
Создание подкаталогов ... ok
Выбор реализации динамической разделяемой памяти ... posix
Выбор максимального числа соединений по умолчанию ... 100
Выбор размера разделяемых буферов по умолчанию ... 128МБ
Выбор часового пояса по умолчанию ... Etc/UTC
Создание файлов конфигурации ... ok
Запуск скрипта инициализации ... ok
Выполнение пост-инициализации ... ok
Синхронизация данных с диском ... ok


Успешно. Теперь вы можете запустить сервер базы данных, используя:

/usr/lib/postgresql/12/bin/pg_ctl -D /shared/postgres_data_new -l logfile start

Hit:1 http://deb.debian.org/debian buster InRelease
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65,4 КБ]
Get:3 http://deb.debian.org/debian buster-updates InRelease [49,3 КБ]
Get:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84,6 КБ]
Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [201 КБ]
Hit:6 https://deb.nodesource.com/node_10.x buster InRelease
Get:7 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Packages [171 КБ]
Получено 571 КБ за 1 с (810 КБ/с)
Чтение списков пакетов...
Чтение списков пакетов...
Построение дерева зависимостей...
Чтение информации о состоянии...
Будут установлены следующие дополнительные пакеты:
  postgresql-client-10
Рекомендуемые пакеты:
  postgresql-doc-10
Будут установлены следующие НОВЫЕ пакеты:
  postgresql-10 postgresql-client-10
0 обновлено, 2 новых установлено, 0 для удаления и 9 не обновлено.
Необходимо получить 6 390 КБ архивов.
После этой операции будет использовано дополнительно 30,6 МБ дискового пространства.
Get:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-10 amd64 10.13-1.pgdg100+1 [1 428 КБ]
Get:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-10 amd64 10.13-1.pgdg100+1 [4 961 КБ]
Получено 6 390 КБ за 2 с (4 017 КБ/с)
Выбор ранее не выбранного пакета postgresql-client-10.
(Чтение базы данных ... на данный момент установлено 43929 файлов и каталогов.)
Подготовка к распаковке .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...
Распаковка postgresql-client-10 (10.13-1.pgdg100+1) ...
Выбор ранее не выбранного пакета postgresql-10.
Подготовка к распаковке .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...
Распаковка postgresql-10 (10.13-1.pgdg100+1) ...
Настройка postgresql-client-10 (10.13-1.pgdg100+1) ...
update-alternatives: предупреждение: принудительная повторная установка альтернативы /usr/share/postgresql/12/man/man1/psql.1.gz, так как группа ссылок psql.1.gz повреждена
Настройка postgresql-10 (10.13-1.pgdg100+1) ...
Создание нового кластера PostgreSQL 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Файлы, принадлежащие этой системе баз данных, будут принадлежать пользователю «postgres».
Этот пользователь также должен владеть процессом сервера.

Кластер баз данных будет инициализирован с локалью «C.UTF-8».
Кодировка базы данных по умолчанию соответственно установлена в «UTF8».
Конфигурация поиска текста по умолчанию будет установлена в «english».

Контрольные суммы страниц данных отключены.

Исправление прав доступа в существующем каталоге /var/lib/postgresql/10/main ... ok
Создание подкаталогов ... ok
Выбор максимального числа соединений по умолчанию ... 100
Выбор размера разделяемых буферов по умолчанию ... 128МБ
Выбор часового пояса по умолчанию ... Etc/UTC
Выбор реализации динамической разделяемой памяти ... posix
Создание файлов конфигурации ... ok
Запуск скрипта инициализации ... ok
Выполнение пост-инициализации ... ok
Синхронизация данных с диском ... ok

Успешно. Теперь вы можете запустить сервер базы данных, используя:

pg_ctlcluster 10 main start

Предупреждение: выбранный каталог stats_temp_directory /var/run/postgresql/10-main.pg_stat_tmp
не доступен для записи владельцем кластера. Это значение не будет добавлено в
postgresql.conf.
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5433 down   postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: предупреждение: принудительная повторная установка альтернативы /usr/share/postgresql/12/man/man1/postmaster.1.gz, так как группа ссылок postmaster.1.gz повреждена
invoke-rc.d: не удалось определить текущий уровень выполнения
invoke-rc.d: политика policy-rc.d запретила выполнение запуска.
Обработка триггеров для postgresql-common (213.pgdg100+1) ...
Построение словарей PostgreSQL из установленных пакетов myspell/hunspell...
Удаление устаревших файлов словарей:
Остановка сервера базы данных PostgreSQL 10: main.
Остановка сервера базы данных PostgreSQL 12: main.
Выполнение проверок согласованности
-----------------------------
Проверка версий кластеров                                   ok
Проверка пользователя базы данных как пользователя установки                  ok
Проверка настроек подключения к базе данных                       ok
Проверка подготовленных транзакций                          ok
Проверка типов данных reg* в пользовательских таблицах                 ok
Проверка contrib/isn с несоответствием передачи bigint       ok
Проверка таблиц WITH OIDS                               ok
Проверка некорректных пользовательских колонок «sql_identifier»          ok
Создание дамп глобальных объектов                             ok
Создание дамп схем баз данных
  discourse
  postgres
  template1
                                                        ok
Проверка наличия необходимых библиотек                 ok
Проверка пользователя базы данных как пользователя установки                  ok
Проверка подготовленных транзакций                          ok

Если pg_upgrade завершится с ошибкой после этой точки, вы должны повторно инициализировать
новый кластер перед продолжением.

Выполнение обновления
------------------
Анализ всех строк в новом кластере                       ok
Замораживание всех строк в новом кластере                        ok
Удаление файлов из нового pg_xact                             ok
Копирование старого pg_xact на новый сервер                           ok
Установка следующего ID транзакции и эпохи для нового кластера       ok
Удаление файлов из нового pg_multixact/offsets                ok
Копирование старого pg_multixact/offsets на новый сервер              ok
Удаление файлов из нового pg_multixact/members                ok
Копирование старого pg_multixact/members на новый сервер              ok
Установка следующего multixact ID и смещения для нового кластера        ok
Сброс архивов WAL                                      ok
Установка счетчиков frozenxid и minmxid в новом кластере       ok
Восстановление глобальных объектов в новом кластере                 ok
Восстановление схем баз данных в новом кластере
  template1
  discourse
  postgres
                                                        ok
Копирование файлов пользовательских отношений
  /shared/postgres_data/base/16400/2613
  /shared/postgres_data/base/16400/2683
  /shared/postgres_data/base/16400/16728
  /shared/postgres_data/base/16400/16728_fsm
  /shared/postgres_data/base/16400/16728_vm
  /shared/postgres_data/base/16400/16731
  /shared/postgres_data/base/16400/84163
  /shared/postgres_data/base/16400/84163_fsm
  /shared/postgres_data/base/16400/84163_vm
……
                                                        ok
Установка следующего OID для нового кластера                            ok
Синхронизация каталога данных с диском                                 ok
Создание скрипта для анализа нового кластера                      ok
Создание скрипта для удаления старого кластера                       ok

Обновление завершено
----------------
Статистика оптимизатора не переносится pg_upgrade, поэтому,
после запуска нового сервера, рассмотрите возможность выполнения:
./analyze_new_cluster.sh

Запуск этого скрипта удалит файлы данных старого кластера:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ОБНОВЛЕНИЕ POSTGRES ЗАВЕРШЕНО

Старая база данных 10 сохранена в /shared/postgres_data_old

Для завершения обновления выполните сборку повторно, используя:

./launcher rebuild app
-------------------------------------------------------------------------------------

Похоже, что с момента последнего обновления два года назад остались некоторые файлы:

mv: не удалось переместить '/shared/postgres_data' в '/shared/postgres_data_old/postgres_data': Директория не пуста
mv: не удалось переместить '/shared/postgres_data_new' в '/shared/postgres_data/postgres_data_new': Директория не пуста

Можете ли вы переместить эти файлы в другое место перед пересборкой?

Вот и всё! Спасибо, @Falco.

Спасибо, я добавил это в FAQ. Также я добавлю проверку этого состояния в скрипт обновления.