アップグレード v3.5.2 -> v3.6.0.beta2 後のデータベースアクセス問題

  • v3.5.2 → v3.5.2
  • v3.6.0.beta2 → v3.6.0.beta2

このスレッドがこの状況に至りました: Upgrade failed. Database stopped. (multisite install)

現在、データベースへのアクセスに問題があります。


2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse LOG:  provided user name (postgres) and authenticated user name (discourse) do not match 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse FATAL:  Peer authentication failed for user "postgres" 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse DETAIL:  Connection matched pg_hba.conf line 89: "local   all             postgres       
                        peer"
postgres=# \l
List of databases
Name     |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-------------±---------±---------±----------------±------------±------------±-----------±----------±-----------------------
b_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
c_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
discourse   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
postgres    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
template0   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
template1   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
(6 rows)


multisite.yaml はこれらのバージョン間で変更されました。

Original:
secondsite:
adapter: postgresql
database: b_discourse
pool: 25
timeout: 5000
db_id: 2
host_names:
- ``forum.domain.com

New:
mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000
host_names:
- discourse.nudderdomain.com
- discourse.nudderdomain.internal

マルチサイトを設定した際、パスワードやユーザーは必要なかったり、元のテンプレートに記載されていなかったため、設定していませんでした。

当初、multisite.yml に記載された 2 つのサイトの権限の問題でマルチサイトが失敗したため、アップグレードできませんでした。postgres を multisite.yml のユーザーとして追加しても、マイグレーションには機能しませんでした。今になって、discourse を試すべきだったのかもしれないと気づきました。

オーナーを discourse に変更するだけで問題は解決しますか?マルチサイトが現在と一致するように、ユーザーとパスワードを追加する必要がありますか?

ここに最適な長期的な解決策は何ですか?

投稿は非常に読みにくいため、非公開にしました。フォーマットを修正していただければ、再度公開できます。

「いいね!」 2

理解しやすく、一貫性を持たせるために、私は大変な努力をしました。

自分の言いたいことはわかっていますよ。:wink:

編集:わかりました。私が使っている他のフォーラムは少し違います。ブロックの前後にトリプルティックを使います。これで何が起こっているのかわかりました。このフォーラムでは、最初のティックセットが貼り付け用のウィンドウを挿入します。トリプルティックが機能しなかった理由がわかりませんでしたし、< />が本当に欲しいものを与えてくれませんでした。

「いいね!」 1

投稿で多くのマークダウンを扱う必要がある場合は、マークダウンエディターに切り替えることができます。

データベースのパスワードの問題は奇妙ですね。新しいサーバーへの移行を検討しましたか?この問題と格闘するよりも、そちらの方が迅速かつ簡単かもしれません。

これらの指示に従いましたか?(そうではないようですが?)

かなりの確率でそうなると思いますが、マルチサイトのインストールに関するトピックにあるようなものがすべて揃っていることを確認してください。

サイトが現在機能しているのであれば、クリーンなマルチサイトをインストールし、データベースをバックアップ/復元することをお勧めします。他のすべてのものは、Move a Discourse site to another VPS with rsync で説明されているようにコピーできます。

なぜデータベースに b_discourse と c_discourse という名前を付けたのか不思議に思っていました。今なら理由がわかります。 :wink:

## プラグインはここに追加します
## 詳細については https://meta.discourse.org/t/19157 を参照してください
hooks:
  after_postgres:
     - exec: sudo -u postgres createdb b_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database b_discourse to discourse;
          cmd: sudo -u postgres psql b_discourse
          raise_on_fail: false

     - exec: sudo -u postgres createdb c_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database c_discourse to discourse;
          cmd: sudo -u postgres psql c_discourse
          raise_on_fail: false

     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"alter schema public owner to discourse;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"create extension if not exists hstore;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"create extension if not exists pg_trgm;"'

権限がどのように付与されるのか完全には理解していないため、これらについて疑問に思っていました。(問題のある2つのデータベースの上のスクリーンショット):

良いニュースと悪いニュースがあります。 :frowning:
今は :frowning: の状態です。

2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';

代わりに

ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

しかし:

b_discourse=# ALTER EXTENSION vector UPDATE TO '0.8.0';
ERROR:  extension "vector" has no update path from version "0.7.4" to version "0.8.0"

データベースの所有者を変更することには懐疑的でしたが、それが次善策かもしれません。

./launcherpostgres ユーザーとして接続する方法はありますか? それでここでのアップグレードの問題がすべて解決するはずです。

b_discourse=# select e.extname, u.usename 
             from pg_extension e 
             join pg_user u on e.extowner = u.usesysid;
 extname  |  usename  
----------+-----------
 plpgsql  | postgres
 hstore   | postgres
 pg_trgm  | postgres
 unaccent | discourse
 vector   | postgres
(5 rows)

拡張機能のオーナーを変更しようとすると「問題」が発生しているようです。最初に見つけた参照は 2017 年で、2022 年でもまだ実装されていません。

apt を使って新しい拡張機能をインストールし、動作させることができました。まったく。あとは、適切なバックアップを行い、Postgres 15 にアップデートする必要があります。でも、今夜は無理です :wink:

履歴が消去されたようで、正確にどうやったのか伝えられませんが、注意してください。Postgres 13 が必要で、それを再インストールしようとします。

追伸:自動バックアップを有効にしていたことが判明しましたが、忘れていました。どこにあるのかも知りませんでした。他のサーバーバックアップを行うディレクトリにバックアップを配置するために、rsync プロセスを設定します。

「いいね!」 2