Проблемы с обновлением до PostgreSQL 15

Здравствуйте,
Я запустил обновление после, наверное, года, что привело к переходу с pg 13 на 15.

Я пытаюсь запустить команду с моим собственным LC_LANG, но это не работает: `FATAL: data directory “/shared/postgres_data” does not exist`. И действительно, его нет… У кого-нибудь есть идеи?

Должна существовать папка /shared/postgres_old.

Изменение вашего LC_LANG, скорее всего, — плохая идея.

У меня возникла точно такая же ошибка, что и у вас: «/bin/bash: warning: setlocale: LC_ALL: cannot change locale», когда я пытался выполнить команду launch rebuild app. Это привело меня в итоге к этому посту. Удалось ли вам в итоге решить проблему? Команды docker run, как указано выше, лишь приводят к ещё большим проблемам.

Я добавил маппинг -v /var/discourse/shared/standalone:/shared, и теперь я продвинулся немного дальше. Странно, что его там нет. Проблема может быть в том, что мое «приложение» всё ещё застряло на какой-то версии 2024 года, и «пересборка» не работает. Просто предположение…

Так, у меня было это в app.yml, и всё работало нормально:

env:
  LC_ALL: fr_BE.UTF-8
  LANG: fr_BE.UTF-8
  LANGUAGE: fr_BE.UTF-8

Я имел в виду LANG, а не LC_LANG. Проблема в том, что если я сейчас откатюсь к чему-то другому, то будет «слишком поздно». Я пробовал en_US.UTF_8, но ничего не вышло — пересборка всегда завершается ошибкой.

Если у вас нет актуальной резервной копии и вы не можете перезапустить старый контейнер, то я бы переключился на шаблон PG13, настроил работающую среду, создал резервную копию, развернул новый сервер и восстановил эту копию там. Вы можете настроить его на любом языке, который вам нравится, пока база данных пуста, а затем выполнить восстановление (возможно, язык волшебным образом преобразуется?).

Перенос на новый сервер гарантирует, что вы не «уроните» свой текущий сервер.

К сожалению, я уже нахожусь в аварийном состоянии. У меня есть резервные копии, но я не могу их восстановить, так как разница в версиях слишком велика, и возникают проблемы с зависимостями gem. Я также не могу вернуться к старой версии, поскольку лаунчер автоматически обновляется, что, на мой взгляд, немного обидно.

При установке LC_ALL я получаю:

/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups.rb
/usr/local/bin/pups --stdin
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (fr_BE.UTF-8)
I, [2025-12-02T15:46:29.638999 #1]  INFO – : Reading from stdin
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `split': invalid byte sequence in US-ASCII (ArgumentError)

    split = conf.split("_FILE_SEPERATOR_")
                       ^^^^^^^^^^^^^^^^^^
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `run'
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/bin/pups:9:in `<top (required)>'
    from /usr/local/bin/pups:25:in `load'
    from /usr/local/bin/pups:25:in `<main>'

bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
19a63b958021df0ecbc7e21bfea95f1c5ef7b039efd669b5d4af48b05d397a58

Если я удалю LC_ALL, то команда “./launcher rebuild app” останавливается на:

Performing Consistency Checks

Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Checking for not-null constraint inconsistencies            ok
Creating dump of global objects                             ok
Creating dump of database schemas                           ok

lc_collate values for database "template1" do not match:  old "fr_BE.UTF-8", new "en_US.UTF-8"

При использовании “ручной” команды docker, упомянутой в первом посте, мне также пришлось создать ссылки в /etc/postgresql на /var/…, так как некоторые файлы отсутствовали, и в итоге я получил ту же ошибку, что и выше.

Я попробую выполнить новую установку и восстановить данные там.

Сомневаюсь, что изменение версии действительно слишком велико. Вы пробовали настроить новый сервер и восстановить на нём резервную копию? Я восстанавливал копии, которые были старше сайта, на который их восстанавливал, на несколько лет. Я почти уверен, что это сработает. Я переносил сайты на новые серверы несколько раз в месяц. Проблемы возникали только тогда, когда индекс был повреждён, но я не сталкивался с этим уже довольно давно.

Вы пробовали переименовать postgres_old в postgres_data и затем выполнить:

./launcher start app

О, это отличная идея! Вот почему мне стоит читать весь пост перед ответом. :slight_smile:

Я могу подтвердить, что новая установка также ломается при заданном LC_ALL, точно так же, как показано выше (_FILE_SEPERATOR_ …). Однако без LC_ALL всё работает нормально.

Я смог восстановить своё сохранение с помощью чистой новой установки на последнем мастер-ветке, спасибо. Исправление этих проблем останется загадкой…

Отлично!

Я перенёс это в новую тему. Если один из моих ответов стал решением, пожалуйста, отметьте его, чтобы это могло быть автоматически закрыто.