アップグレード中に、以下のようなエラーが発生しました。
PostgreSQL 15 データベースサーバーを停止しています: mainエラー: 設定のオーナー (postgres:101) とデータのオーナー (runit-log:999) が一致せず、設定のオーナーが root ではありません… 失敗しました!
失敗しました!
バージョンファイル “/shared/postgres_data/PG_VERSION” を開けませんでした: 権限がありません
失敗、終了します
これは、以下によって解決されました。
sudo ./launcher enter app
そして
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /shared/postgres_run
chmod -R 700 /shared/postgres_data
無限ループに陥っています。データベースは正常に更新されましたが、./launcher rebuild app を実行するとループしてしまいます。見えるのは以下の情報だけです。
編集:このメッセージを見つけました…
mv: デバイス間で移動できません: '/shared/postgres_data_new' を '/shared/postgres_data/postgres_data_new' に移動できません。ターゲットを削除できません: ディレクトリが空ではありません
お使いのインストールには、ALTER EXTENSION コマンドで更新する必要がある拡張機能が含まれています。
update_extensions.sql
ファイルをデータベースのスーパーユーザーが psql で実行すると、これらの拡張機能が更新されます。
アドバイスをお願いします。
アップグレード完了
----------------
オプティマイザ統計は pg_upgrade では転送されません。
新しいサーバーを起動したら、以下を実行することを検討してください。
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
このスクリプトを実行すると、古いクラスターのデータファイルが削除されます。
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
POSTGRES のアップグレード完了
古い 13 データベースは /shared/postgres_data_old に保存されています。
アップグレードを完了するには、以下を使用して再度再構築してください。
./launcher rebuild app
-------------------------------------------------------------------------------------
さて、問題はここにあるようです。
これらは shared/standalone/ にあり、すでに手動で移動されています…
mv: '/shared/postgres_data' を '/shared/postgres_data_old' に移動できません: デバイスまたはリソースがビジー状態です
mv: デバイス間で移動できません: '/shared/postgres_data_new' を '/shared/postgres_data/postgres_data_new' に移動できません。ターゲットを削除できません: ディレクトリが空ではありません
I, [2025-02-08T15:22:42.078189 #1] INFO -- : ロケールを生成しています (これにはしばらく時間がかかる場合があります)...
どの解決策も効果がないようです。とてもイライラします。
まず尋ねられることなく、そのようなサービスを提供すると申し出るのは非常に珍しいことです。
誰かを雇いたい場合は、ここに行きましょう: Marketplace - Discourse Meta
アップグレード後にマルチサイトインスタンスがダウンしました。次のように表示されました。
インストールには、ALTER EXTENSION コマンドで更新する必要がある拡張機能が含まれています。
update_extensions.sqlファイルをデータベースのスーパーユーザーが psql で実行すると、これらの拡張機能が更新されます。
update_extensions.sql ファイルが見つかりません。どこにありますか?
これを確認してください
mv: '/shared/postgres_data' を '/shared/postgres_data_old' に移動できません: デバイスまたはリソースがビジー状態です
mv: デバイス間の移動に失敗しました: '/shared/postgres_data_new' から '/shared/postgres_data/postgres_data_new' へ。ターゲットを削除できません: ディレクトリが空ではありません
I, [2025-02-08T15:22:42.078189 #1] INFO -- : ロケールの生成中 (しばらく時間がかかる場合があります)...
それは私でした。解決が難しいと思われる状況にある人がいる場合、私は助けを提供します。
好奇心からの質問です。
Postgresのような主要コンポーネントのアップグレードに関する標準や戦略はありますか?
Postgres 13のサポートは11/25までで、15は2027年まで続き、現在のバージョンは17です。
本当に学び、理解したいだけです。データベースのバージョンを変更することは、一般的に大きな問題であり、大変な作業です。
よろしくお願いします!
私はPostgreSQL 10から使っています。通常は2つのリリースごとにアップグレードしますが、12から13に進んだのは、いくつかの改善があり早めに切り替える価値があったためです。彼らが16に進まなかったので少し驚きました。
通常、十分なディスクスペースと最新のDockerがあれば、かなりスムーズに進みます。
修正があるまで13テンプレートに戻しました。ありがとうございます。
PostgreSQL 13 から 15 へのアップグレードに関する問題を解決しました。失敗したアップグレードをバックアップからサーバーに復元した後、PostgreSQL en_GB.UTF-8 ロケールで以下の手順が機能しました。
sudo -i
su - discourse
cd /var/discourse
git stash
git stash drop
git pull
./launcher stop app
docker run --rm \
--entrypoint=/bin/bash \
-e LANG='en_GB.UTF-8' \
-v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/13/data \
-v /var/discourse/shared/standalone/postgres_data_new:/var/lib/postgresql/15/data \
tianon/postgres-upgrade:13-to-15 \
-c 'sed -i "s/^# $LANG/$LANG/" /etc/locale.gen && locale-gen &&
apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
docker-upgrade'
exit
mv /var/discourse/shared/standalone/postgres_data /var/discourse/shared/standalone/postgres_data_old
mv /var/discourse/shared/standalone/postgres_data_new /var/discourse/shared/standalone/postgres_data
chown -R 101:104 /var/discourse/shared/standalone/postgres_data
su - discourse
cd /var/discourse
docker run --rm -v /var/discourse/shared/standalone:/shared \
local_discourse/app chown -R postgres:postgres /shared/postgres_data
./launcher rebuild app
PostgreSQL の LANG に対する過去のローカル変更を git stash; git stash drop で削除する必要があり、PostgreSQL データディレクトリの移動は root として実行し、chown が必要でした。
今回 git pull は必要ですか? 通常は不要ですが。
今日では、リビルドがそれを行うため、決して必要ありません。
最初のエラーからの末尾のメッセージ Device or resource busy は、他の何かがその postgres_data ディレクトリのロックを保持しているため、移動できないことを示唆しています。
それがデータベースディレクトリであるため、postgres_data がマウントポイントである可能性が高いです。2番目の mv コマンドで inter-device move failed が表示され、shared/postgres_data_new と shared/postgres_data が異なるディスク/パーティション上にあることを示唆しているため、これはさらに可能性が高くなります。
postgres_data がマウントポイントであることを確認した場合は、手動で postgres_data 内のすべてのファイルを別のバックアップディレクトリに移動し、その後、postgres_data_new 内のすべてのファイルを(空になった)postgres_data ディレクトリに移動する必要があります。両方の移動は、最初の再構築が UPGRADE OF POSTGRES COMPLETE で完了した後、2番目の再構築を発行する前に行う必要があります。
postgres_data がマウントポイントでない場合は、lsof が役に立ちます。それを使用して、ロックの原因を特定してみてください。
もちろん、最初に必要なバックアップを取ってください。
完璧です、ありがとうございます。
ファイルは次のフォルダにありました。
/var/postgres_data_discourse (postgres_data_new として)
以下の手順で解決しました。
postgres_data_new を /var に移動しました。
postgres_data_discourse を postgres_data_discourse_old にリネームしました。
postgres_data_new を postgres_data_discourse にリネームしました。
./launcher rebuild app を発行しました。
改めてありがとうございました ![]()
62gのdbがあります。最高のアップグレードを実行するために何をお勧めしますか?
62G /var/discourse/shared/standalone/postgres_data
新しいVMに移行し、新しいDiscourseを起動し、データベースを空にして(ゼロダウンタイムの切り替えをご希望の場合は、sslとletsencryptのディレクトリをコピーしてください)、現在のデータベースを新しいサーバーに復元することを推奨します。これにより、ゼロダウンタイムでアップグレードを実行でき、問題が発生するリスクもゼロになります。
いずれにしても、OSのアップグレードもそろそろ時期かもしれません。
古いバージョンのDiscourseを新しいバージョンに復元できるかどうか尋ねているのであれば、その答えはイエスです。