postgres 15 アップグレードでの問題

こんにちは。
おそらく1年ぶりにアップデートを実行したところ、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

私が言いたかったのは LC_LANG ではなく LANG でした。問題は、今これを他のものに戻すと「手遅れ」になることです。en_US.UTF_8 を試しましたが、何も機能せず、再構築は常に失敗します。

現在のバックアップがなく、古いコンテナを再起動できない場合は、PG13テンプレートに切り替えて動作するセットアップを取得し、バックアップを作成してから、新しいサーバーを設定してバックアップを復元することをお勧めします。空のデータベースで好きな言語を設定してから復元を実行できます(そして、おそらく言語は魔法のように変換されるかもしれません)。

新しいサーバーに移行することで、既存のサーバーがクラッシュするのを防ぐことができます。

「いいね!」 1

残念ながら、すでにクラッシュした状態です。バックアップはありますが、バージョンアップの差が大きすぎ、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:

新しいインストールでも、上記に示されているのと同じ方法で(_FILE_SEPARATOR_…)、LC_ALLを設定すると壊れることを確認できます。ただし、LC_ALLを設定しない場合は問題ありません。

最新のマスターで新しいクリーンインストールを行い、セーブデータを復元できました。これらの問題が修正されるかどうかは謎のままです…

「いいね!」 1

素晴らしい!

これを新しいトピックに移動しました。もし私の返信のいずれかが解決策であった場合は、それをマークしていただけると、自動的にクローズできるようになります。

「いいね!」 2