アップグレード失敗: PostgreSQL バージョン 13 はバージョン 10.12 と互換性がありません

私は、Discourse ベースの小さなフォーラム「themooster.net」を運営しており、数ヶ月間アップグレードを行っていませんでした。

「Admin」の推奨事項にある「Update」をクリックしたところ、代わりにシェルプロンプトでアップグレードを行う必要があると表示され、以下の 3 行を実行するように指示されました。

    cd /var/discourse
    git pull
    ./launcher rebuild app

これら 3 つのコマンドを実行しました。「rebuild app」は当初失敗しましたが、それは私の小さな Linode ボックスに 5GB の空き容量がなかったためです。そのため、ディスク容量を追加したところ、「rebuild app」は正常に完了したように見えました。

しかし、サイトが再び起動しませんでした。

いろいろ確認し、再起動してもまだ起動せず、さらに詳しく調べました。

フロントエンドの nginx は正常に起動しているようですが、通常のユーザーとしてウェブからフォーラムにアクセスしようとすると、nginx フロントエンドから「502 Bad Gateway」エラーが表示されます。

ファイル「/var/discourse/shared/standalone/log/var-log/postgres/current」には、以下のようなエラーが記録されています。

2021-04-17 13:54:37.785 UTC [7095] FATAL: database files are incompatible with server
2021-04-17 13:54:37.785 UTC [7095] DETAIL: The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 10.12 (Debian 10.12-2.pgdg100+1).

私のディレクトリには、フォーラムの良好なバックアップがあります。
/var/discourse/shared/standalone/backups/default

次にどうすべきでしょうか?

PostgreSQL 13 の更新をご覧ください

PostgreSQL 13 のリンクは現在確認いたします。ありがとうございます。

Discourse の背後にある主要な技術(PostgreSQL、Ruby、Linux など)を常時監視するフルタイムの管理者でなくても、この複雑さを事前に知る方法があったでしょうか?

もしそうであれば、3 行の指示(cd /var/discourse; …)に、「まず、適用される可能性のある他の情報については、こちらを確認してください」という警告行を追加することはできないでしょうか?

そうでない場合、Discourse はカジュアルな利用には適していないことをより明確に伝えるべきです。

PostgreSQL 13 のアップデートページ(ご親切にリンクしていただいたもの)をもう数回読んでみます。

ただ、最初の数回読んだだけでは、ほとんど理解できませんでした。そのページのどのセクションが私の状況に当てはまるのか(もしあれば)、全く見当がつきません。

例えば、その PostgreSQL 13 のアップデートページは(当然といえば当然ですが)、PostgreSQL 12 から 13 へのアップグレードに焦点が当てられています。しかし、私のエラーメッセージは以下の通りです。

The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 10.12 (Debian 10.12-2.pgdg100+1).

これはバージョン 10.12 について言及しています。これは PostgreSQL 10 を指しているのでしょうか、それとも PostgreSQL 12 でしょうか(通常、「10.12」という表記は、12 よりも主に 10 を指すと読み取るはずです)。

あ、なるほど。私のファイル:

/var/discourse/shared/standalone/postgres_data_old/PG_VERSION

の中身は「10」でした。

つまり、上記の PostgreSQL 13 のリンクは、12 から 13 へのアップグレードに適用される場合でも、少なくとも私の知る限りでは、必ずしも関連するとは限りません(私の知識は限られています)。

この状況には非常に不安を感じています……まるで、暗闇の洞窟の中で、マニュアルも訓練も受けずに、自分がどの種類の兵器を扱っているかさえ確信が持てないまま、生きた軍用弾薬の修理を試みているようなものです。

このコメントは、偶然見つけたものです:

https://meta.discourse.org/t/how-do-i-manually-update-discourse-and-docker-image-to-latest/23325/238?u=thepythoniccow

「もう一度ビルドし直すべきです。おそらく、Postgres のアップグレードに関するメッセージを見落としたのでしょう。」

この言葉から、「cd /var/discourse; git pull; ./launcher rebuild app」を再度実行してみるべきだと考えました……どうやらこの「rebuild」は複数回試すことができるようです。

今回は出力をキャプチャしました。ただし、出力のほとんどを見落としていることは保証します。「./launcher rebuild app」コマンドだけで 2020 行もの出力があります。どのプログラムが実行されており、その出力メッセージが何を意味するのかをすべて理解するには、何ヶ月もかかるでしょう。その出力の中で重要なメッセージを見落としているかどうかを、実用的な方法で知ることはできません。

しかし……

成功しました!!

ウェブサイトが再起動し、最新のバージョンのソフトウェアで動作しています。

今日の教訓:./launcher rebuild app」コマンドを実行してもサイトが正常に動作しない場合は、もう一度試してみてください。

「いいね!」 2

ああ、あの男に伝えたことをお伝えするのを忘れてごめんなさい!

:tada: 素晴らしい!無事にできましたね。

そうですね。それ以外に必要な情報はもうないかもしれません。:slight_smile:

再び使えるようになってよかったです!

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.