アップグレードに失敗しました。データベースが停止しました。(マルチサイトインストール)

ログインしました。11ヶ月間更新していませんでした。Docker Managerのアップグレードを試みることから始めました。完了しなかったようです。翌日、管理ページはほとんど壊れていました。./launcher rebuild app を実行しようとしましたが、以下のエラーが発生しました。

2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse ERROR:  must be owner of extension vector
2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

しかし、データベースが停止しているため、見つけた修正は機能しません。

2025-10-31 00:27:40.021 UTC [662] FATAL:  database files are incompatible with server
2025-10-31 00:27:40.021 UTC [662] DETAIL:  The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 13.16 (Debian 13.16-1.pgdg120+1).

しかし、

root@main-app:/var/lib/postgresql# pg_config --version
PostgreSQL 16.4 (Debian 16.4-1.pgdg120+1)

編集:DBはまだ13形式のようです。

root@main-app:/var/lib/postgresql# ls
13  take-database-backup

まだPostgreSQL 15 update - Announcementsのトピックを見ていない場合は、まずそこから始めると良いでしょう。そこでは、多くの問題と推奨事項について議論されています。

「いいね!」 2

ありがとうございます。すべてを理解するには多すぎますが、私の問題のように見えるものはありません。:frowning: 再構築プロセス中にデータベースが実行されているようです。これは奇妙な部分です。少なくとも、流れていく情報からわかる限りでは。

11ヶ月も経つと、ほとんどの場合、それは機能しません。

Postgres 15へのアップグレードが絶対に必要であり、それが問題の一部です。アップグレードを行う前に、Postgres 13に切り替えて物事を再び動かすことができる可能性があります。

「いいね!」 1

これは標準的なインストールですか?

マルチサイトがまだサポートされていないと見なされている場合、そうではありません。

問題は、インストール時に個々のデータベースに接続されたユーザー/パスワードがなかったことのようです。それは変更されるようです。そこに問題があります。ユーザーを追加してからパスワードが空のユーザーを追加して少し調整してみましたが、うまくいきませんでした。

私の設定と新しいサンプル設定の比較:


secondsite:
adapter: postgresql
database: b_discourse

pool: 25
timeout: 5000
db_id: 2
host_names:

mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000

host_names:

これは、データベースが実際にインストールプロセス中に起動することを意味しますか?

2025-10-31 15:14:30.984 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0
-14+deb12u1) 12.2.0, 64-bit
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv4 address “0.0.0.0”, port 5432
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv6 address “::”, port 5432
2025-10-31 15:14:31.055 UTC [45] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432”
2025-10-31 15:14:31.135 UTC [56] LOG:  database system was shut down at 2025-10-31 02:08:49 UTC
2025-10-31 15:14:31.199 UTC [45] LOG:  database system is ready to accept connections
I, [2025-10-31T15:14:35.760150 #1]  INFO – :
I, [2025-10-31T15:14:35.760557 #1]  INFO – : > /usr/local/bin/create_db
2025-10-31 15:14:35.912 UTC [63] postgres@postgres ERROR:  database “discourse” already exists
2025-10-31 15:14:35.912 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse ERROR:  role “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role “discourse” already exists
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
I, [2025-10-31T15:14:37.265035 #1]  INFO – : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-10-31T15:14:37.265325 #1]  INFO – : > echo postgres installed!
I, [2025-10-31T15:14:37.270967 #1]  INFO – : postgres installed!

I, [2025-10-31T15:14:37.271578 #1]  INFO – : > sudo -u postgres createdb b_discourse || exit 0
2025-10-31 15:14:37.380 UTC [104] postgres@postgres ERROR:  database “b_discourse” already exists
2025-10-31 15:14:37.380 UTC [104] postgres@postgres STATEMENT:  CREATE DATABASE b_discourse;
createdb: error: database creation failed: ERROR:  database “b_discourse” already exists
I, [2025-10-31T15:14:37.385149 #1]  INFO – :
I, [2025-10-31T15:14:37.385968 #1]  INFO – : > sudo -u postgres psql b_discourse
I, [2025-10-31T15:14:37.390476 #1]  INFO – : grant all privileges on database b_discourse to discourse;

I, [2025-10-31T15:14:37.515870 #1]  INFO – : > sudo -u postgres createdb c_discourse || exit 0
2025-10-31 15:14:37.625 UTC [111] postgres@postgres ERROR:  database “c_discourse” already exists
2025-10-31 15:14:37.625 UTC [111] postgres@postgres STATEMENT:  CREATE DATABASE c_discourse;
createdb: error: database creation failed: ERROR:  database “c_discourse” already exists
I, [2025-10-31T15:14:37.629387 #1]  INFO – :
I, [2025-10-31T15:14:37.630145 #1]  INFO – : > sudo -u postgres psql c_discourse
I, [2025-10-31T15:14:37.634672 #1]  INFO – : grant all privileges on database c_discourse to discourse;

I, [2025-10-31T15:14:37.758171 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'alter schema public owner to discourse;'
I, [2025-10-31T15:14:37.876557 #1]  INFO – : ALTER SCHEMA

I, [2025-10-31T15:14:37.877104 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'create extension if not exists hstore;'
NOTICE:  extension “hstore” already exists, skipping
I, [2025-10-31T15:14:37.997465 #1]  INFO – : CREATE EXTENSION

I, [2025-10-31T15:14:37.998029 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'create extension if not exists pg_trgm;'
NOTICE:  extension “pg_trgm” already exists, skipping
I, [2025-10-31T15:14:38.117879 #1]  INFO – : CREATE EXTENSION

2025-10-31 15:14:30.984 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0
-14+deb12u1) 12.2.0, 64-bit
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv4 address “0.0.0.0”, port 5432
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv6 address “::”, port 5432
2025-10-31 15:14:31.055 UTC [45] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432”
2025-10-31 15:14:31.135 UTC [56] LOG:  database system was shut down at 2025-10-31 02:08:49 UTC
2025-10-31 15:14:31.199 UTC [45] LOG:  database system is ready to accept connections
I, [2025-10-31T15:14:35.760150 #1]  INFO – :
I, [2025-10-31T15:14:35.760557 #1]  INFO – : > /usr/local/bin/create_db
2025-10-31 15:14:35.912 UTC [63] postgres@postgres ERROR:  database “discourse” already exists
2025-10-31 15:14:35.912 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse ERROR:  role “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role “discourse” already exists
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
I, [2025-10-31T15:14:37.265035 #1]  INFO – : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-10-31T15:14:37.265325 #1]  INFO – : > echo postgres installed!
I, [2025-10-31T15:14:37.270967 #1]  INFO – : postgres installed!

I, [2025-10-31T15:14:37.271578 #1]  INFO – : > sudo -u postgres createdb b_discourse || exit 0
2025-10-31 15:14:37.380 UTC [104] postgres@postgres ERROR:  database “b_discourse” already exists
2025-10-31 15:14:37.380 UTC [104] postgres@postgres STATEMENT:  CREATE DATABASE b_discourse;
createdb: error: database creation failed: ERROR:  database “b_discourse” already exists
I, [2025-10-31T15:14:37.385149 #1]  INFO – :
I, [2025-10-31T15:14:37.385968 #1]  INFO – : > sudo -u postgres psql b_discourse
I, [2025-10-31T15:14:37.390476 #1]  INFO – : grant all privileges on database b_discourse to discourse;

I, [2025-10-31T15:14:37.515870 #1]  INFO – : > sudo -u postgres createdb c_discourse || exit 0
2025-10-31 15:14:37.625 UTC [111] postgres@postgres ERROR:  database “c_discourse” already exists
2025-10-31 15:14:37.625 UTC [111] postgres@postgres STATEMENT:  CREATE DATABASE c_discourse;
createdb: error: database creation failed: ERROR:  database “c_discourse” already exists
I, [2025-10-31T15:14:37.629387 #1]  INFO – :
I, [2025-10-31T15:14:37.630145 #1]  INFO – : > sudo -u postgres psql c_discourse
I, [2025-10-31T15:14:37.634672 #1]  INFO – : grant all privileges on database c_discourse to discourse;

I, [2025-10-31T15:14:37.758171 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'alter schema public owner to discourse;'
I, [2025-10-31T15:14:37.876557 #1]  INFO – : ALTER SCHEMA

I, [2025-10-31T15:14:37.877104 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'create extension if not exists hstore;'
NOTICE:  extension “hstore” already exists, skipping
I, [2025-10-31T15:14:37.997465 #1]  INFO – : CREATE EXTENSION

I, [2025-10-31T15:14:37.998029 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<<'create extension if not exists pg_trgm;'
NOTICE:  extension “pg_trgm” already exists, skipping
I, [2025-10-31T15:14:38.117879 #1]  INFO – : CREATE EXTENSION

Pgvector 拡張機能が古いか、データベースのいずれかに設定されていません。数か月前のいくつかのインストールでこれが発生しました。解決は非常に簡単で、更新するだけです。

db コンテナーに入り、discourse (または db オーナーが何であれ) として psql を実行し、各データベースを選択して以下を実行します。

ALTER EXTENSION vector UPDATE;

「いいね!」 1

c_discourseデータベースの拡張機能の所有者がdiscourseユーザーではないようです。所有者を確認する必要があります。例:

discourse_development=# select extname, extowner, usename, extversion from pg_extension JOIN pg_user on pg_extension.extowner = pg_user.usesysid;
 extname  | extowner | usename  | extversion
----------+----------+----------+------------
 vector   |    16385 | michael  | 0.8.0
 unaccent |       10 | postgres | 1.1
 pg_trgm  |       10 | postgres | 1.6
 hstore   |       10 | postgres | 1.8
 plpgsql  |       10 | postgres | 1.0

そして、そのユーザーまたはデータベースのスーパーユーザーとして拡張機能の更新コマンドを実行してください。

「いいね!」 2

これを実行するためにデータベースをどのように開始すればよいか、何かお手伝いいただけませんか?それが本当に問題の核心です。

編集:見つかったPostgreSQLファイルはすべて/13のものです。そのため、ある種の limbo 状態にあります。データベースプログラムはアップグレードされたようですが、データベースファイルはアップグレードされませんでした。いくつか検索しましたが、ファイルをコピーして操作してみる以外に、自信を持ってできるものはありませんでした。

2025-10-31 00:27:40.021 UTC [662] FATAL: database files are incompatible with server
2025-10-31 00:27:40.021 UTC [662] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 13.16 (Debian 13.16-1.pgdg120+1).

app.yml を編集し、PostgreSQL 13 テンプレートを使用して再構築できるはずです。これは、PostgreSQL 15 アップデート トピックで説明されているとおりです。

その後、再構築できます。その後、コンテナを開始できます。その後、コンテナに入ることができます。その後、pgvectkr の作業を行うことができます。

さて、15個を削除して13個をインストールしましたが、奇妙なことに、同じエラーが発生しました。プロセスのかなり早い段階で中断しました。:frowning:

2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

これが失敗した箇所です。
2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

13のテンプレートを試しました。問題は、データベースがすでに15によって変更されていることですが、追加された2つのマルチサイトの移行が、インストーラーが認識できないように見えるユーザーで追加されたことです。前述したように、これらを最初に追加したときにユーザー/パスワードの組み合わせの要件はなかったので、データベースにどのように追加されたのか正確にはわかりません。

ユーザー/パスワードオプションに、それらを満たすことができる値を追加することは可能でしょうか?覚えておいてください、私がそれらを追加しなかったので、初期スクリプトは、表示される出力によって示されるデフォルトユーザーであるpostgresの下にそれらをどのように入れたのでしょうか。

データベースを起動するために、2つの追加されたサイトをコメントアウトしてから、現在使用されているインポート方法を使用することは可能でしょうか?

pg 15のトピックを見ると、pg 13のファイルが含まれているバックアップディレクトリの名前を変更する方法がわかります。

それが長いスレッドなので、正しいものを確認させてください。

  1. 13テンプレートを使用します
  2. /shared/postgres_data/shared/postgres_data.bak のようなものに移動します
  3. /shared/postgres_data_old/shared/postgres_data に移動します

これでデータベースは古いものを使用して実行されますか?

root@main-app:/shared/postgres_data_old# cat PG_VERSION
13
root@main-app:/shared/postgres_data# cat PG_VERSION
15

その後、

について心配します。

データベースは常に私の弱点でした。:frowning: これは私が考えていたものとは異なる構造のようです。つまり、これらの奇妙で不透明な番号付きディレクトリのいずれかに、これらのすべてのものが /var/lib/posgresql に格納されているということです。

ご協力に感謝いたします。私がユーザーの何人かに首をかしげているフォーラムがいくつかあります。:wink:

プラグインをバンドルした Discourse のバージョンを構築している場合、PostgreSQL のバージョンに関係なく、pgvector 拡張機能が見つからないという理由でビルドが失敗します。古いバージョンの PostgreSQL を使用している場合は、最初よりもさらに多くの問題が発生します。

このアップグレードの旅に出る前にバックアップを取ったことを願っています。

別の場所に新しい Discourse インスタンスをセットアップし、バックアップを復元することを提案します。それがこの状況から抜け出す唯一の信頼できる方法です。

手動で行うこともできますが、はるかに多くの作業が必要であり、結果は保証されません。

昨夜、新しいバージョンがプッシュされましたか? Git pull をいくつか見たような気がします。 とにかく、13 のテンプレートを使ってデータを移動するのはうまくいきました。まあまあですが。:wink:
データベースは正常に移行したようです。数ページにわたる出力の中に「grant error」が見つかりません。そこにないという意味ではありません。エラーを検索できる保存された出力を得るために、discourse_doctor を実行する必要があるかもしれません。データベースは稼働しています。ブラウザでは、Bad Gateway の代わりにページエラーが表示されます。完全を期すために、出力の最後をここに記載しますが、以前にリストされたのと同じ grant error が見つからなければ、新しいスレッドを開始します。
これまでに助けてくれたすべての人に感謝します。少なくともデータベースにはアクセスできるようになりました。ここまで助けてくれたすべての人に心から感謝します。
大変感謝しています!


== 20240611170904 UpgradePgvector070: migrating ===============================

I, [2025-11-02T15:17:02.281908 #1] INFO -- : Terminating async processes
I, [2025-11-02T15:17:02.282204 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U p
ostgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 2547
I, [2025-11-02T15:17:02.282450 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 2644
2025-11-02 15:17:02.289 UTC [2547] LOG: received fast shutdown request
2644:signal-handler (1762096622) Received SIGTERM scheduling shutdown...
2644:M 02 Nov 2025 15:17:02.299 # User requested shutdown...
2644:M 02 Nov 2025 15:17:02.299 * Saving the final RDB snapshot before exiting.
2025-11-02 15:17:02.384 UTC [2547] LOG: aborting any active transactions
2025-11-02 15:17:02.391 UTC [2547] LOG: background worker \"logical replication launcher\" (PID 2562) exited with exit code 1
2025-11-02 15:17:02.452 UTC [2557] LOG: shutting down
2644:M 02 Nov 2025 15:17:02.549 * DB saved on disk
2644:M 02 Nov 2025 15:17:02.549 # Redis is now ready to exit, bye bye...
2025-11-02 15:17:06.304 UTC [2547] LOG: database system is shut down

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate failed with return #&lt;Process::Status: pid 4308
exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:inspawn’ exec failed with the params “cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate” 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. `

編集:ログでこれを見つけました。doctor を実行してエラーを検索するまで、何もするつもりはありません。
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse LOG: provided user name (postgres) and authenticated user name (discourse) do not match
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse FATAL: Peer authentication failed for user "postgres"
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse DETAIL: Connection matched pg_hba.conf line 89: "local all postgres
peer"

このスレッドを終了するために、doctorを実行したところ、alterエラーが見つかりました。データベースは実行中だったので、multisiteに関係するデータベースでalterコマンドを実行し、ビルドを再実行したところ、移行が完了しました。データベースへのユーザーアクセスは維持されていますが、それについては別のスレッドを開始します。

ここまでのご協力、ありがとうございました。

root として移動したため、ファイルの chown と chmod を行う必要がありました。これらは文書化していませんが、エラー出力に示されています。

現在の問題へのリンク。

投稿が既存のトピックにマージされました: v3.5.2 → v3.6.0.beta2 アップグレード後のデータベースアクセス問題