PostgreSQL 15へのアップグレードができません

こんにちは。こちらの投稿を拝見しました: PostgreSQL 15 update - そしてバージョン15へのアップグレードを試みましたが、リビルドコマンドを実行した際に、見慣れないエラーが発生し、調査しても問題が解決しませんでした。どなたかご協力いただけると幸いです。

ロケールとPostgresの両方がバージョン13から初期化されており、15との互換性がないと苦情が出ています。

WARNING: Docker version 20.10.7 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 app
app
2.0.20250129-0720: Pulling from discourse/base
Digest: sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
Status: Image is up to date for discourse/base:2.0.20250129-0720
docker.io/discourse/base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-25T12:02:47.588312 #1]  INFO -- : Reading from stdin
I, [2025-02-25T12:02:47.603317 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2025-02-25T12:02:47.608602 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2025-02-25T12:02:47.614271 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2025-02-25T12:02:47.619607 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown:
I, [2025-02-25T12:02:47.623993 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2025-02-25T12:02:47.624696 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.628520 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.629701 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.635680 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.636635 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.637658 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.638584 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.639215 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.639833 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-25T12:02:47.640892 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-25T12:02:47.641570 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-25T12:02:47.642114 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-25T12:02:47.642818 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

failed to set locale!
[error] character map file `UTF-8' not found: No such file or directory
failed to set locale!
[error] default character map file `ANSI_X3.4-1968' not found: No such file or directory
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "en_US.UTF-8",
        LC_ALL = "en_US.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
popen failure: Cannot allocate memory
initdb: error: program "postgres" is needed by initdb but was not found in the same directory as "/usr/lib/postgresql/15/bin/initdb"
I, [2025-02-25T12:02:49.979779 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
Upgrading PostgreSQL from version 13 to 15

I, [2025-02-25T12:02:49.980481 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
I, [2025-02-25T12:02:49.983148 #1]  INFO -- : Terminating async processes
2025-02-25 12:02:50.007 UTC [51] FATAL:  database files are incompatible with server
2025-02-25 12:02:50.007 UTC [51] DETAIL:  The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 15.10 (Debian 15.10-1.pgdg120+1).

よろしくお願いいたします。

これはおそらく最も深刻な問題です。RAMを増やすか、スワップを追加する必要があります。

これらの簡単な診断の出力を投稿してください。

お時間をいただきありがとうございます。メモリの件は完全に失念していました。ご要望の結果はこちらです。

root@glorious-discourse-forum:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.5 LTS"
root@glorious-discourse-forum:~# uptime
 13:27:58 up 1341 days, 22:37,  2 users,  load average: 0.07, 0.03, 0.00
root@glorious-discourse-forum:~# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        49G   41G  7.7G  85% /
root@glorious-discourse-forum:~# free
              total        used        free      shared  buff/cache   available
Mem:        2040976      416492      436628       20940     1187856     1433788
Swap:       2097148       85248     2011900
root@glorious-discourse-forum:~# swapon
NAME      TYPE SIZE  USED PRIO
/swapfile file   2G 83.3M   -2
root@glorious-discourse-forum:~# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0  85248 436692 444416 743440    8    8   268    88    0    0  3  1 96  0  0
 0  0  85248 436684 444416 743440    0    0     0     0   50   87  0  0 100  0  0
 0  0  85248 436716 444416 743440    0    0     0     8   48   78  0  0 100  0  0
 0  0  85248 436716 444416 743440    0    0     0     6   39   63  0  0 100  0  0
 0  0  85248 436716 444416 743440    0    0     0     0   54   91  0  0 100  0  0
root@glorious-discourse-forum:~# dmesg|egrep -i "memory|oom|kill"
root@glorious-discourse-forum:~# ps auxrc
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      5781  0.0  0.1  40100  3332 pts/6    R+   13:28   0:00 ps

ありがとう。スワップを2Gまたは4G追加することを試すことができると思いますが、Dockerが古いというメッセージと18.04LTSを実行しているということは、新しいOS(できれば24.04)をクリーンインストールした新しいインスタンスに移行する方がはるかに良い状況になるでしょう。現在、24.04と22.04の両方を実行しています。

新しいクリーンなインスタンスに移行することは、インプレースアップグレードを試みるよりも、全体的に労力が少ない可能性があります。混乱も少ないかもしれません。どのような方法をとるにしても、ある程度のダウンタイムは非常に高い確率で発生するでしょう。

最初のステップは、バックアップ(ダウンロードを含む)を取得し、安全な場所に保管するためにダウンロードすることです。app.ymlファイルもコピーしてください。

私も昨日、同様の理由で移行を行いました。また、ホスティングプロバイダーの新しいオファリングに切り替えることで、同じコストでより良いマシンを手に入れることができました。

ここでは、移行レシピとヒントに従いました。

また、最良の結果を得るためには、以下をお読みください。
MKJ’s Opinionated Discourse Deployment Configuration

スワップを追加する場合、特にディスク容量も少し不足しています。通常は次のようにします。
du -kx / | sort -n | tail -55
または同様のコマンドで、不要な大きなファイルがないか確認します。

「いいね!」 1

バックアップと復元ではなく、別の移行方法としてrsyncを使用できます。私は行ったことがありませんが、ここに手順があります。

もう一つの問題は、DockerのバージョンとOSのアップグレードが必要なことです。

Dockerバージョン24.0.7以降は、Ubuntu LTS 18よりも新しいバージョンが必要です。そのLTSの長期サポートは終了しています。

18.04でアップグレードされたサイトをいくつか見ましたが、ほとんどがそうではありませんでした。

dist-upgrade を実行して管理できた人もいますが、その成功は不確かです。また、6年前のOSの残骸が、24.04がサポートされている次の5年間問題を引き起こす可能性を本当に望んでいますか?さらに、18.04のアップグレードでは20.04にしか到達できず、これは約60日間有効なので、最新のOSに到達するには3回のdist-upgradeを実行する必要があります。

私もまったく同じエラーが発生しました。./launcher rebuildを実行したのですが、フォーラムや警告をきちんと確認せずに、なんとなく盲目的にアップデートを実行してしまいました。この実行を停止/元に戻すにはどうすればよいですか?実行中にCtrl+Cを押して終了すればよいのでしょうか?

何が起こりましたか? エラーが発生しましたか? 再構築を再度実行するように指示されましたか?

Dockerをアップグレードしましたか?

試しましたか

 ./launcher start app

PostgreSQL 15 updateを見ましたか?

DETAIL: データディレクトリはPostgreSQLバージョン13によって初期化されました。これは、このバージョン15.10 (Debian 15.10-1.pgdg120+1) と互換性がありません。 の後、何も動作しなくなりました。
サーバーを再起動したところ、サーバーが復旧しました。
Dockerが理由もなく20で止まっていて、他の依存関係もあるので、さらにアップデートを実行しています。金曜の夜を過ごすのに良い方法ですね(笑)。

それは残念。

月曜日まで待って、新しいVMに移行します。これはもう寿命が尽きていると思います。

ホストOS、Dockerのバージョンをアップデートし、DBのアップデートもできました。さらにRAMも増設したので、これでまた5年は大丈夫かな?(笑)

OSのアップグレード(特にDocker)をすれば、おそらくそうでしょう!

「いいね!」 2