PostgreSQL 15 Update

Erfolg. Sie können nun den Datenbankserver mit folgendem Befehl starten:

    pg_ctlcluster 13 main start

invoke-rc.d: konnte aktuellen Runlevel nicht ermitteln
invoke-rc.d: policy-rc.d verweigerte die Ausführung von start.
PostgreSQL 13-pgvector (0.8.0-1.pgdg120+1) wird eingerichtet ...
Verarbeitung von Triggern für libc-bin (2.36-9+deb12u9) ...
Verarbeitung von Triggern für postgresql-common (267.pgdg120+1) ...
Erstelle PostgreSQL-Wörterbücher aus installierten myspell/hunspell-Paketen...
Entferne veraltete Wörterbuchdateien:
Stoppe PostgreSQL 13 Datenbankserver: main.
Stoppe PostgreSQL 15 Datenbankserver: main.
Konsistenzprüfungen werden durchgeführt
-----------------------------
Cluster-Versionen werden geprüft                                   ok
Der Quellcluster wurde nicht sauber heruntergefahren.
Fehler, wird beendet
-------------------------------------------------------------------------------------
UPGRADE VON POSTGRES FEHLGESCHLAGEN
Besuchen Sie https://meta.discourse.org/t/postgresql-15-update/349515 für Unterstützung.
Sie können ./launcher start app ausführen, um Ihre App in der Zwischenzeit neu zu starten
-------------------------------------------------------------------------------------


FEHLGESCHLAGEN
--------------------
Pups::ExecError: 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
 schlug mit Rückgabewert #<Process::Status: pid 17 exit 1> fehl
Ort des Fehlers: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec fehl mit den Parametern {"tag"=>"db", "cmd"=>"if [ -f /root/install_postgres ]; then\n  /root/install_postgres && rm -f /root/install_postgres\nelif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then\n  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1\nfi\n"}
Bootstrap fehlgeschlagen mit Exit-Code 1
** BOOTSTRAP FEHLGESCHLAGEN ** bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann bei der Diagnose des Problems helfen.
cbebd339ee3bd1e246300784f7825042702c1b5032877bfe580cb7f635fb852b

Festplatteninformationen:

========================================
Discourse 3.4.0.beta3
Discourse-Version auf mydomian: Discourse 3.4.0.beta3
Discourse-Version auf localhost: Discourse 3.4.0.beta3


==================== ARBEITSSPEICHERINFORMATION ====================
RAM (MB): 2055

              gesamt  genutzt  frei  shared  Puffer/Cache  verfügbar
Arbeitsspeicher:           1960        1463         100          43         396         255
Swap:          2047          66        1981

==================== FESTPLATTENSPEICHERPRÜFUNG ====================
---------- OS Festplattenspeicher ----------
Dateisystem      Größe  Benutzt Verf. Ben.% Eingehängt auf
/dev/root        59G   45G   14G  77% /

---------- Container Festplattenspeicher ----------
Dateisystem      Größe  Benutzt Verf. Ben.% Eingehängt auf
overlay          59G   45G   14G  77% /
/dev/root        59G   45G   14G  77% /shared
/dev/root        59G   45G   14G  77% /var/log

==================== FESTPLATTENINFORMATION ====================
Festplatte /dev/loop0: 110,24 MiB, 115593216 Bytes, 225768 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop2: 73,91 MiB, 77479936 Bytes, 151328 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop3: 103,102 MiB, 109043712 Bytes, 212976 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop4: 73,89 MiB, 77459456 Bytes, 151288 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop5: 55,68 MiB, 58363904 Bytes, 113992 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop6: 63,71 MiB, 66789376 Bytes, 130448 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop7: 63,10 MiB, 67080192 Bytes, 131016 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/xvda: 60 GiB, 64424509440 Bytes, 125829120 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattentyp: dos
Festplattenbezeichner: 0x15e6b846

Gerät     Boot Start       End   Sektoren Größe Typ
/dev/xvda1 *     2048 125829086 125827039  60G 83 Linux

Festplatte /dev/loop8: 26,33 MiB, 27602944 Bytes, 53912 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop9: 110,4 MiB, 115384320 Bytes, 225360 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop10: 55,37 MiB, 58052608 Bytes, 113384 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop11: 104,2 MiB, 109252608 Bytes, 213384 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

Festplatte /dev/loop13: 25,76 MiB, 26992640 Bytes, 52720 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

==================== ENDE FESTPLATTENINFORMATION ====================

Bedeutet dies, dass ich Docker zuerst aktualisieren sollte, wenn ich dieses Problem beim Versuch eines Rebuilds habe?

Ich bin jetzt auf 3.4.0.beta3-dev(93983286b5)

Update: Ich habe es erneut versucht und diesmal hat es erfolgreich funktioniert.

2 „Gefällt mir“

Dafür gibt es spezielle Anweisungen im OP.

Sie sollten Docker wahrscheinlich unabhängig davon aktualisieren, ob Sie Probleme haben.

2 „Gefällt mir“

Was mir schließlich geholfen hat, war, Docker zu aktualisieren.
Ich habe https://stackoverflow.com/a/30794189 befolgt und dann Folgendes ausgeführt:
sudo service docker start

Erst dann:

./launcher start app
./launcher stop app
./launcher rebuild app
3 „Gefällt mir“

I’m having significant problems doing this upgrade too. Similar @Vaping_Community, I have postgres on a different mounted volume (/mnt/volume_tor1_01/shared/standalone).

I am getting this error

mv: cannot move '/shared/postgres_data' to '/shared/postgres_data_old': Device or resource busy
mv: inter-device move failed: '/shared/postgres_data_new' to '/shared/postgres_data/postgres_data_new'; unable to remove target: Directory not empty

 [...]

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

My understanding is that the solution is to basically manually rename
postgres_datapostgres_data_old
postgres_newpostgres_data

then run ./launcher rebuild app. Seems simple enough, but when I rebuild, I still am stuck in the loop and end up with the following directories:

  • postgres_data_older
  • postgres_data_old (I think it becomes postgres_data_older)
  • postgres_data
  • postgres_data_new

It seems like for some reason it’s not recognizing that postgres_data has updated, tries to do it again, fails when trying to move the directory.

$ cat postgres_data/PG_VERSION 
15

I tried the manual approach laid out in the OP but no luck either. Please help!

full log
x86_64 arch detected.
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-23T11:41:32.477354 #1]  INFO -- : Reading from stdin
I, [2025-02-23T11:41:32.504068 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-23T11:41:32.508552 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-23T11:41:32.513290 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.517671 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.522244 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.523354 #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-23T11:41:32.523912 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.524756 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.525365 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.526239 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.526873 #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-23T11:41:32.527613 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.531734 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.532882 #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-23T11:41:32.534021 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-23T11:41:32.534342 #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-23T11:41:32.534935 #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-23T11:41:32.535476 #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

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
W: https://dl.yarnpkg.com/debian/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
debconf: delaying package configuration, since apt-utils is not installed
mv: cannot move '/shared/postgres_data' to '/shared/postgres_data_old': Device or resource busy
mv: inter-device move failed: '/shared/postgres_data_new' to '/shared/postgres_data/postgres_data_new'; unable to remove target: Directory not empty
I, [2025-02-23T11:42:52.303584 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
Upgrading PostgreSQL from version 13 to 15
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /shared/postgres_data_new ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok


Success. You can now start the database server using:

    /usr/lib/postgresql/15/bin/pg_ctl -D /shared/postgres_data_new -l logfile start

Get:1 http://deb.debian.org/debian bookworm-backports InRelease [59.0 kB]
Get:2 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:4 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:5 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
Get:6 https://deb.nodesource.com/node_22.x nodistro InRelease [12.1 kB]
Get:7 http://deb.debian.org/debian bookworm-backports/main amd64 Packages [283 kB]
Get:8 http://deb.debian.org/debian bookworm/main amd64 Packages [8,792 kB]
Get:9 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.5 kB]
Get:10 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [246 kB]
Get:11 https://dl.yarnpkg.com/debian stable/main amd64 Packages [10.9 kB]
Get:12 https://dl.yarnpkg.com/debian stable/main all Packages [10.9 kB]
Get:13 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg InRelease [129 kB]
Get:14 https://deb.nodesource.com/node_22.x nodistro/main amd64 Packages [5,636 B]
Get:15 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 Packages [360 kB]
Fetched 10.2 MB in 2s (6,490 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  libllvm19 postgresql-client-13
Suggested packages:
  postgresql-doc-13
The following NEW packages will be installed:
  libllvm19 postgresql-13 postgresql-13-pgvector postgresql-client-13
0 upgraded, 4 newly installed, 0 to remove and 12 not upgraded.
Need to get 41.6 MB of archives.
After this operation, 184 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 libllvm19 amd64 1:19.1.4-1~deb12u1 [25.9 MB]
Get:2 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-client-13 amd64 13.20-1.pgdg120+1 [1,538 kB]
Get:3 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13 amd64 13.20-1.pgdg120+1 [13.9 MB]
Get:4 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13-pgvector amd64 0.8.0-1.pgdg120+1 [297 kB]
Fetched 41.6 MB in 2s (18.8 MB/s)
Selecting previously unselected package libllvm19:amd64.
(Reading database ... 33363 files and directories currently installed.)
Preparing to unpack .../libllvm19_1%3a19.1.4-1~deb12u1_amd64.deb ...
Unpacking libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
Selecting previously unselected package postgresql-client-13.
Preparing to unpack .../postgresql-client-13_13.20-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-client-13 (13.20-1.pgdg120+1) ...
Selecting previously unselected package postgresql-13.
Preparing to unpack .../postgresql-13_13.20-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-13 (13.20-1.pgdg120+1) ...
Selecting previously unselected package postgresql-13-pgvector.
Preparing to unpack .../postgresql-13-pgvector_0.8.0-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
Setting up libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
Setting up postgresql-client-13 (13.20-1.pgdg120+1) ...
Setting up postgresql-13 (13.20-1.pgdg120+1) ...
Creating new PostgreSQL cluster 13/main ...
/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main --auth-local peer --auth-host md5
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/13/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

    pg_ctlcluster 13 main start

invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
Processing triggers for libc-bin (2.36-9+deb12u9) ...
Processing triggers for postgresql-common (267.pgdg120+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
Stopping PostgreSQL 13 database server: main.
Stopping PostgreSQL 15 database server: main.
Performing Consistency Checks
-----------------------------
Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Creating dump of global objects                             ok
Creating dump of database schemas                           ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok
Checking for new cluster tablespace directories             ok

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

Performing Upgrade
------------------
Analyzing all rows in the new cluster                       ok
Freezing all rows in the new cluster                        ok
Deleting files from new pg_xact                             ok
Copying old pg_xact to new server                           ok
Setting oldest XID for new cluster                          ok
Setting next transaction ID and epoch for new cluster       ok
Deleting files from new pg_multixact/offsets                ok
Copying old pg_multixact/offsets to new server              ok
Deleting files from new pg_multixact/members                ok
Copying old pg_multixact/members to new server              ok
Setting next multixact ID and offset for new cluster        ok
Resetting WAL archives                                      ok
Setting frozenxid and minmxid counters in new cluster       ok
Restoring global objects in the new cluster                 ok
Restoring database schemas in the new cluster               ok
Copying user relation files                                 ok
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to delete old cluster                       ok
Checking for extension updates                              notice

Your installation contains extensions that should be updated
with the ALTER EXTENSION command.  The file
    update_extensions.sql
when executed by psql by the database superuser will update
these extensions.


Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------
1 „Gefällt mir“

Upgrade auf ARM (aarch64) mit nicht-standardmäßigem Locale

Ich habe gerade einige Zeit damit verbracht, ein fehlerhaftes Upgrade auf einem einzelnen Server mit zwei Container-Setups zu beheben.

  1. Die CPU ist ARM
  2. Discourse war mit dem Locale en_UK.UTF-8 konfiguriert

Schritt für Schritt habe ich herausgefunden, dass:

  1. tianon/postgres-upgrade:13-to-15 funktioniert nicht auf ARM
  2. Die Locale-Konfiguration wird in share/${CONTAINER}/postgres_data/postgresql.conf gespeichert

Ich begann damit, den env:-Teil des Datencontainers auszukommentieren, um sicherzustellen, dass er Standard-Locales verwendet.

Um aus dem Upgrade-Chaos herauszukommen, habe ich einen gefährlichen Schritt unternommen und angenommen, dass die Kollationsunterschiede zwischen en_GB und en_US vernachlässigbar sind. Ich habe den gesamten Cluster rücksichtslos auf en_US aktualisiert:

UPDATE pg_database SET datctype='en_US.UTF-8', datcollate='en_US.UTF-8';

Ich bin mir nicht sicher, ob dieser Schritt erforderlich ist, \u003cabbr title=“Your Mileage May Vary”\u003eYMMV\u003c/abbr\u003e. Ich überlasse ihn hier für sachkundigere Personen zur Kommentierung und empfehle ihn auf keinen Fall für verschiedene Sprachen!

Dann habe ich das Locale in postgresql.conf ersetzt:

sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
UPGRADE OF POSTGRES COMPLETE

:tada:

Glauben Sie nicht, dass es einfach war: Ich erwähne nicht den langen Weg der Erkundung von Optionen, insbesondere da die Admin-Oberfläche nicht verfügbar war, als ich eingriff, und das letzte Backup 6 Tage alt war. Ich musste herumfummeln, bevor ich zu einer ordnungsgemäßen – oder zumindest funktionierenden – Lösung gelangen konnte.

Ich hoffe, das spart einigen Leuten Zeit.

5 „Gefällt mir“

Sehen Sie dies immer noch in Ihren Protokollen für jeden Rebuild? Wenn ja, vermute ich, dass Sie hier versehentlich die falschen Verzeichnisse betrachtet (und somit manuell umbenannt) haben:

Wenn das /shared-Volume des Containers auf dem Host mit /mnt/volume_tor1_01/shared/standalone zugeordnet ist, dann sollte cat /mnt/volume_tor1_01/shared/standalone/postgres_data/PG_VERSION stattdessen 13 anstelle von 15 zurückgeben.

Können Sie Ihre bereinigte app.yml-Datei teilen?

4 „Gefällt mir“

Ich glaube, Sie haben das Problem richtig erkannt. Hier ist, was ich in meiner app.yml habe:

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
      host: /mnt/volume_tor1_01/shared/standalone
      guest: /shared
  - volume:
      host: /mnt/volume_tor1_01/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/postgres_data_discourse
      guest: /shared/postgres_data

(basierend auf dieser Anleitung Move Uploads and Backups to DigitalOcean Block Storage)

$ cat postgres_data/PG_VERSION 
15
$ cat /var/postgres_data_discourse/PG_VERSION 
13

Ich denke also, das Problem ist tatsächlich mit diesem Ansatz gelöst PostgreSQL 15 update - #125 by Vaping_Community

Ich glaube, was mich verwirrt hat, war, dass ich mehrere postgres_data-Ordner auf dem mnt-Volume hatte (weil ich den Rebuild erneut ausgeführt habe) und nicht erkannte, dass der Quellordner tatsächlich in /var/ lag.

Ich werde es später heute Abend ausprobieren.

2 „Gefällt mir“

Es wäre viel einfacher, eine neue VM hochzufahren und dort eine Sicherung wiederherzustellen. Auf diese Weise überspringen Sie den PG-Upgrade-Schritt vollständig und können Ihre alte Seite nicht kaputt machen, bevor die neue funktioniert.

8 „Gefällt mir“

Es hat funktioniert :slight_smile:

2 „Gefällt mir“

Beachten Sie, dass sich die UIDs ändern!

/launcher enter app
x86_64 arch detected.
grep postgres /etc/passwd
postgres:x:101:104:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

Das ist mir gerade passiert…

Ja, es hat für mich funktioniert, aber es ist besser, die aktualisierte Anweisung aus dem OP-Post zu verwenden.

Ich kann meinen Beitrag nicht bearbeiten, um eine Notiz hinzuzufügen.

2 „Gefällt mir“

Bei mir schlägt es auch fehl.

more /var/discourse/shared/standalone/postgres_data_new/pg_upgrade_output.d/20250416T103311.340/log/pg_upgrade_server.log

-----------------------------------------------------------------
  pg_upgrade run on Wed Apr 16 10:33:11 2025
-----------------------------------------------------------------

command: "/usr/lib/postgresql/13/bin/pg_ctl" -w -l "/shared/postgres_data_new/pg_upgrade_output.d/20250416T103311.340/log/pg_upgrade_server.log" -D "/shared/postgres_data" -o
"-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'" start >> "/shared/postgres_data_new/pg_upgrade_output.d/
20250416T103311.340/log/pg_upgrade_server.log" 2>&1
waiting for server to start....2025-04-16 10:33:11.515 UTC [1887] LOG:  starting PostgreSQL 13.20 (Debian 13.20-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12
.2.0-14) 12.2.0, 64-bit
2025-04-16 10:33:11.517 UTC [1887] LOG:  listening on Unix socket "/var/lib/postgresql/.s.PGSQL.50432"
2025-04-16 10:33:11.525 UTC [1887] LOG:  could not open configuration file "/etc/postgresql/13/main/pg_hba.conf": No such file or directory
2025-04-16 10:33:11.525 UTC [1887] FATAL:  could not load pg_hba.conf
2025-04-16 10:33:11.526 UTC [1887] LOG:  database system is shut down

Es scheint, dass es /etc/postgresql/13/main/pg_hba.conf nicht findet, und das stimmt auch, denn es ist nicht da. Es ist jedoch an mehreren Orten vorhanden:

/var/discourse/shared/standalone/postgres_data_older/pg_hba.conf
/var/discourse/shared/standalone/postgres_data_new/pg_hba.conf
/var/discourse/shared/standalone/postgres_data/pg_hba.conf
/var/lib/docker/overlay2/6514156241efd883dd59b27a0275ba1cc73a7365fb78c5782536a39ee2d6d641/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/8afed861b039e5a366dc9a5513cd7df5a958d86a41f05063ce5256fb9f8fdfec/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/fa8893e9f714439469d391635d8882b345e90705a886d74cf6fea8d5460df3f0/diff/etc/postgresql/15/main/pg_hba.conf
/var/lib/docker/overlay2/e4eec92eb7b181648ca2bc6744ac3af0935745b75b1abe89170fc4b82a8eca42/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/4cd3189b9d554b1c60891dc5d48cc670e5d7d847ec5a0f2dfa91ad7f66b3a211/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/0db2210fc76fce6f41912183f744517154f46af15a0b1a1e976999eabbd801d9/diff/etc/postgresql/15/main/pg_hba.conf
/var/postgres_data/postgres_data_new/pg_hba.conf
/var/postgres_data/pg_hba.conf

Irgendwelche Hinweise?

Ich habe Ihren Befehl docker run… ausprobiert und bekomme:

Überprüfung der Cluster-Versionen
Alte Cluster-Daten und Binärverzeichnisse stammen von verschiedenen Hauptversionen.

Welche Docker-Version hast du? Welche Versions deines Betriebssystems? Ich habe festgestellt, dass der Umstieg auf eine neue VM oft einfacher ist.

Docker-Version: 28.0.4
Linux-Version: 5.15.0-131-generic

Sie können versuchen, in Ihrer app.yml zur Vorlage „postgres 13“ zu wechseln.

Das befindet sich innerhalb des Containers. Sie schauen außerhalb des Containers.

Ich habe es getan, um Discourse zu aktualisieren, und es hat funktioniert. Jetzt habe ich:

templates:
  - "templates/postgres.13.template.yml"

Bedeutet das nicht, dass ich Postgres auch nicht aktualisieren kann?

Ich denke, Sie können es jetzt wieder auf die normale Vorlage umstellen und es erneut versuchen. Was ich tun würde, ist, zu einer neuen VM zu wechseln, aber Sie können es gerne noch einmal versuchen.

Ich habe Postgres manuell wie im ersten Beitrag beschrieben aktualisiert, aber ich kann die Vorlage nicht wieder auf postgres.template.yml zurücksetzen, da sie wegen desselben Problems nicht neu erstellt wird:

2025-04-16 13:40:07.815 UTC [1888] LOG: could not open configuration file “/etc/postgresql/13/main/pg_hba.conf”: No such file or directory
2025-04-16 13:40:07.815 UTC [1888] FATAL: could not load pg_hba.conf

Ich bleibe bei Version 13 und hoffe, dass sie in Zukunft nicht kaputt geht.
Danke @pfaffman.

Versuche, ein Upgrade durchzuführen, aber es schlägt fehl, da eine Datei nicht gefunden werden kann, die meiner Überprüfung nach existiert:

Ende des Protokolls + Überprüfung der Dateien

-----------------------------
Clusterversionen werden überprüft                                     ok
 
*Fehler*
Konsultieren Sie die letzten Zeilen von „/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log“ für
die wahrscheinliche Ursache des Fehlers.
 
Verbindung zum Server über Socket „/var/lib/postgresql/.s.PGSQL.50432“ fehlgeschlagen: Datei oder Verzeichnis nicht gefunden
        Läuft der Server lokal und akzeptiert er Verbindungen über diesen Socket?
 
Konnte den gestarteten Quell-Postmaster nicht verbinden mit dem Befehl:
„/usr/lib/postgresql/13/bin/pg_ctl“ -w -l „/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log“ -D „/shared/postgres_data“ -o „-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'“ start
Fehler, wird beendet
-------------------------------------------------------------------------------------
UPGRADE VON POSTGRES FEHLGESCHLAGEN
 
Besuchen Sie https://meta.discourse.org/t/postgresql-15-update/349515 für Unterstützung.
 
Sie können ./launcher start app ausführen, um Ihre App in der Zwischenzeit neu zu starten
-------------------------------------------------------------------------------------
 
 
 
FEHLGESCHLAGEN
--------------------
Pups::ExecError: 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
 fehlgeschlagen mit Rückgabecode #<Process::Status: pid 17 exit 1>
Ort des Fehlers: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec fehlgeschlagen mit den Parametern {"tag"=>"db", "cmd"=>"if [ -f /root/install_postgres ]; then\n  /root/install_postgres && rm -f /root/install_postgres\nelif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then\n  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1\nfi\n"}
Bootstrap fehlgeschlagen mit Exit-Code 1
** BOOTSTRAP FEHLGESCHLAGEN ** Bitte scrollen Sie nach oben und suchen Sie nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann bei der Diagnose des Problems helfen.
afa058b1ff7d14d9469fe27bc39dc08562c4e249bdf7c7e153b4030a1bb0dbc2
root@amcforum:/var/discourse# ./launcher start app && ./launcher enter app
x86_64 arch erkannt.
 
Starte vorhandenen Container
+ /usr/bin/docker start app
app
x86_64 arch erkannt.
root@amcforum-app:/var/www/discourse# cat /shared/postgres_data_new/pg_upgrade_output.d/0250605T024052.178/log/pg_upgrade_server.log 
-----------------------------------------------------------------
  pg_upgrade ausgeführt am Thu Jun  5 02:40:52 2025
-----------------------------------------------------------------
 
Befehl: „/usr/lib/postgresql/13/bin/pg_ctl“ -w -l „/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log“ -D „/shared/postgres_data“ -o „-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'“ start >> „/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log“ 2>&1
Warte auf Serverstart....2025-06-05 02:40:52.313 UTC [1886] LOG:  starting PostgreSQL 13.21 (Debian 13.21-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-06-05 02:40:52.316 UTC [1886] LOG:  listening on Unix socket „/var/lib/postgresql/.s.PGSQL.50432“
2025-06-05 02:40:52.324 UTC [1886] LOG:  could not open configuration file „/etc/postgresql/13/main/pg_hba.conf“: Datei oder Verzeichnis nicht gefunden
2025-06-05 02:40:52.324 UTC [1886] FATAL:  could not load pg_hba.conf
2025-06-05 02:40:52.327 UTC [1886] LOG:  database system is shut down
 wartete nicht mehr
pg_ctl: konnte Server nicht starten
Untersuchen Sie die Protokollausgabe.
 
 
root@amcforum-app:/var/www/discourse# ls -lah „/etc/postgresql/13/main/pg_hba.conf“
-rw-r----- 1 postgres postgres 4.8K Jan  3 13:02 /etc/postgresql/13/main/pg_hba.conf
root@amcforum-app:/var/www/discourse#
1 „Gefällt mir“