Mise à jour de PostgreSQL 15

Succès. Vous pouvez maintenant démarrer le serveur de base de données en utilisant :

    pg_ctlcluster 13 main start

invoke-rc.d : impossible de déterminer le niveau d'exécution actuel
invoke-rc.d : policy-rc.d a refusé l'exécution de start.
Configuration de postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
Traitement des déclencheurs pour libc-bin (2.36-9+deb12u9) ...
Traitement des déclencheurs pour postgresql-common (267.pgdg120+1) ...
Construction des dictionnaires PostgreSQL à partir des paquets myspell/hunspell installés...
Suppression des fichiers de dictionnaire obsolètes :
Arrêt du serveur de base de données PostgreSQL 13 : main.
Arrêt du serveur de base de données PostgreSQL 15 : main.
Vérification de la cohérence                                   ok
Le cluster source n'a pas été arrêté proprement.
Échec, sortie
-------------------------------------------------------------------------------------
MISE À NIVEAU DE POSTGRES ÉCHOUE
Veuillez visiter https://meta.discourse.org/t/postgresql-15-update/349515 pour obtenir de l'aide.
Vous pouvez exécuter ./launcher start app pour redémarrer votre application en attendant
-------------------------------------------------------------------------------------


ÉCHOUE
--------------------
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
 a échoué avec le retour #<Process::Status: pid 17 exit 1>
Emplacement de l'échec : /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec a échoué avec les paramètres {"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"}
l'amorçage a échoué avec le code de sortie 1
** ÉCHEC DE L'AMORÇAGE ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.
cbebd339ee3bd1e246300784f7825042702c1b5032877bfe580cb7f635fb852b

informations sur le disque :

========================================
Discourse 3.4.0.beta3
Version de Discourse sur mydomian : Discourse 3.4.0.beta3
Version de Discourse sur localhost : Discourse 3.4.0.beta3


==================== INFORMATIONS MÉMOIRE ====================
RAM (Mo) : 2055

              total        utilisé       libre      partagé  tampon/cache   disponible
Mémoire :       1960        1463         100          43         396         255
Swap :          2047          66        1981

==================== VÉRIFICATION ESPACE DISQUE ====================
---------- Espace disque du système d'exploitation ----------
Système de fichiers     Taille Utilisé Dispo Util% Monté sur
/dev/root           59G   45G   14G  77% /

---------- Espace disque du conteneur ----------
Système de fichiers     Taille Utilisé Dispo Util% Monté sur
overlay          59G   45G   14G  77% /
/dev/root        59G   45G   14G  77% /shared
/dev/root        59G   45G   14G  77% /var/log

==================== INFORMATIONS DISQUE ====================
Disque /dev/loop0 : 110,24 Mio, 115593216 octets, 225768 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop2 : 73,91 Mio, 77479936 octets, 151328 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop3 : 103,102 Mio, 109043712 octets, 212976 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop4 : 73,89 Mio, 77459456 octets, 151288 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop5 : 55,68 Mio, 58363904 octets, 113992 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop6 : 63,71 Mio, 66789376 octets, 130448 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop7 : 63,10 Mio, 67080192 octets, 131016 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/xvda : 60 Gio, 64424509440 octets, 125829120 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x15e6b846

Périphérique     Dém. Début      Fin  Secteurs Taille Id Type
/dev/xvda1 *     2048 125829086 125827039  60G 83 Linux

Disque /dev/loop8 : 26,33 Mio, 27602944 octets, 53912 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop9 : 110,4 Mio, 115384320 octets, 225360 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop10 : 55,37 Mio, 58052608 octets, 113384 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop11 : 104,2 Mio, 109252608 octets, 213384 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

Disque /dev/loop13 : 25,76 Mio, 26992640 octets, 52720 secteurs
Unités : secteurs de 1 * 512 = 512 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets

==================== FIN INFORMATIONS DISQUE ====================

Cela signifie-t-il que je devrais d’abord mettre à jour Docker si je rencontre ce problème en essayant de reconstruire ?

Je suis actuellement sur 3.4.0.beta3-dev(93983286b5)

Mise à jour : J’ai reconstruit à nouveau, et cette fois, cela s’est terminé avec succès.

2 « J'aime »

Il y a des instructions spécifiques à ce sujet dans le premier message.

Vous devriez probablement mettre à jour Docker, que vous ayez des problèmes ou non.

2 « J'aime »

Pour moi, ce qui a finalement aidé, c’est de mettre à jour docker.
J’ai suivi https://stackoverflow.com/a/30794189, puis j’ai exécuté :
sudo service docker start

Seulement alors :

./launcher start app
./launcher stop app
./launcher rebuild app
3 « J'aime »

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 « J'aime »

Mise à niveau sur ARM (aarch64) avec une locale non par défaut

J’ai passé un peu de temps à corriger une mise à niveau défectueuse sur un serveur unique avec deux conteneurs.

  1. Son CPU est ARM
  2. Discourse était configuré avec la locale en_UK.UTF-8

Pas à pas, j’ai découvert que :

  1. tianon/postgres-upgrade:13-to-15 ne fonctionne pas sur ARM
  2. La configuration de la locale est stockée dans share/${CONTAINER}/postgres_data/postgresql.conf

J’ai commencé par commenter la partie env: du conteneur de données, pour m’assurer qu’il utilise les locales par défaut.

Ainsi, pour sortir du pétrin de la mise à niveau, j’ai pris une mesure dangereuse, en supposant que les différences de collation entre en_GB et en_US étaient négligeables, et j’ai impitoyablement mis à jour tout le cluster vers en_US :

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

Je ne suis pas sûr que cette étape soit nécessaire, votre expérience peut varier (YMMV). Je la laisse ici pour que d’autres, plus compétents, puissent commenter, et je ne la recommande absolument pas pour des langues différentes !

Ensuite, j’ai remplacé la locale dans postgresql.conf :

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:

Ne pensez pas que ce fut facile : je ne mentionne pas le long chemin d’exploration des options, surtout qu’au moment où je suis intervenu, l’interface d’administration était indisponible, et la dernière sauvegarde datait de 6 jours. J’ai bricoler avant de pouvoir obtenir une résolution appropriée – ou du moins, fonctionnelle.

J’espère que cela fera gagner du temps à certaines personnes.

5 « J'aime »

Voyez-vous toujours cela dans vos journaux pour chaque reconstruction ? Si oui, je soupçonne que vous regardiez (donc renommé manuellement) les mauvais répertoires ici :

Si le volume /shared du conteneur est mappé à /mnt/volume_tor1_01/shared/standalone sur l’hôte, alors cat /mnt/volume_tor1_01/shared/standalone/postgres_data/PG_VERSION devrait retourner 13 au lieu de 15.

Pouvez-vous partager votre fichier app.yml nettoyé ?

4 « J'aime »

Je pense que vous avez correctement identifié le problème. Voici ce que j’ai dans mon app.yml :

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
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

(basé sur ce guide Move Uploads and Backups to DigitalOcean Block Storage)

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

Je pense donc que le problème est effectivement résolu par cette approche PostgreSQL 15 update - #125 by Vaping_Community

Je pense que ce qui m’a bloqué, c’est que j’avais plusieurs dossiers postgres_data sur le volume mnt (parce que j’ai relancé la reconstruction) et que je n’avais pas réalisé que le dossier source se trouvait en fait dans /var/

Je vais essayer cela plus tard ce soir.

2 « J'aime »

Ce serait beaucoup plus facile de lancer une nouvelle VM et de restaurer une sauvegarde dessus. De cette façon, vous skipping complètement l’étape de mise à niveau de PG et ne risquez pas de casser votre ancien site avant que le nouveau ne fonctionne.

8 « J'aime »

Ça a marché :slight_smile:

2 « J'aime »

Notez que les UID changent !

/launcher enter app
Détection de l'architecture x86_64.
grep postgres /etc/passwd
postgres:x:101:104:Administrateur PostgreSQL,,,:/var/lib/postgresql:/bin/bash

Cela vient de me piéger…

Oui, cela a fonctionné pour moi, mais il est préférable d’utiliser les instructions mises à jour du message de l’OP,

Je ne peux pas modifier mon message pour ajouter une note.

2 « J'aime »

Ça échoue pour moi aussi.

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

Il semble qu’il ne trouve pas /etc/postgresql/13/main/pg_hba.conf, et il a raison car il n’y est pas. Il est cependant à plusieurs endroits :

/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

Des indices ?

J’ai essayé votre commande docker run… et je reçois :

Vérification des versions du cluster
Les anciens répertoires de données et binaires du cluster proviennent de versions majeures différentes.

Quelle est votre version de Docker ? Quelle est la version de votre OS ? J’ai constaté qu’il est souvent plus facile de passer à une nouvelle VM.

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

Vous pouvez essayer de passer au modèle postgres 13 dans votre app.yml.

Ceci est à l’intérieur du conteneur. Vous regardez à l’extérieur du conteneur.

Je l’ai fait juste pour mettre à jour Discourse, et cela a fonctionné, j’ai maintenant :

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

Cela ne signifie-t-il pas que je ne peux pas mettre à niveau Postgres ?

Je pense que vous pouvez maintenant revenir au modèle habituel et réessayer. Ce que je ferais, c’est passer à une nouvelle VM, mais vous pouvez réessayer si vous le souhaitez.

J’ai mis à niveau Postgres manuellement comme décrit dans le premier post, de toute façon je ne peux pas rétablir le modèle sur postgres.template.yml car il ne reconstruira pas pour le même problème :

2025-04-16 13:40:07.815 UTC [1888] LOG: impossible d’ouvrir le fichier de configuration « /etc/postgresql/13/main/pg_hba.conf » : Aucun fichier ou répertoire de ce type
2025-04-16 13:40:07.815 UTC [1888] FATAL: impossible de charger pg_hba.conf

Je m’en tiendrai à la version 13 en espérant qu’elle ne pose pas de problème à l’avenir.
Merci @pfaffman.

Tentative d’exécution d’une mise à niveau, elle échoue car elle ne trouve pas un fichier dont j’ai confirmé l’existence :

Fin du journal + vérification des fichiers

-----------------------------
Vérification des versions du cluster                                   ok
 
*échec*
Consultez les dernières lignes de \"/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log\" pour
la cause probable de l'échec.
 
la connexion au serveur sur le socket \"/var/lib/postgresql/.s.PGSQL.50432\" a échoué : Aucun fichier ou répertoire de ce type
        Le serveur est-il en cours d'exécution localement et accepte-t-il les connexions sur ce socket ?
 
impossible de se connecter au postmaster source démarré avec la commande :
\"/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
Échec, sortie
-------------------------------------------------------------------------------------
MISE À NIVEAU DE POSTGRES ÉCHOUÉE
 
Veuillez visiter https://meta.discourse.org/t/postgresql-15-update/349515 pour obtenir de l'aide.
 
Vous pouvez exécuter ./launcher start app pour redémarrer votre application en attendant
-------------------------------------------------------------------------------------
 
 
 
ÉCHEC
--------------------
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
 a échoué avec le retour #<Process::Status: pid 17 exit 1>
Emplacement de l'échec : /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec a échoué avec les paramètres {\"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 a échoué avec le code de sortie 1
** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.
afa058b1ff7d14d9469fe27bc39dc08562c4e249bdf7c7e153b4030a1bb0dbc2
root@amcforum:/var/discourse# ./launcher start app && ./launcher enter app
Détection de l'architecture x86_64.
 
démarrage du conteneur existant
+ /usr/bin/docker start app
app
Détection de l'architecture x86_64.
root@amcforum-app:/var/www/discourse# cat /shared/postgres_data_new/pg_upgrade_output.d/0250605T024052.178/log/pg_upgrade_server.log 
-----------------------------------------------------------------
  pg_upgrade exécuté le Thu Jun  5 02:40:52 2025
-----------------------------------------------------------------
 
commande : \"/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
attente du démarrage du serveur....2025-06-05 02:40:52.313 UTC [1886] LOG:  démarrage de PostgreSQL 13.21 (Debian 13.21-1.pgdg120+1) sur x86_64-pc-linux-gnu, compilé par gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-06-05 02:40:52.316 UTC [1886] LOG:  écoute sur le socket Unix \"/var/lib/postgresql/.s.PGSQL.50432\"
2025-06-05 02:40:52.324 UTC [1886] LOG:  impossible d'ouvrir le fichier de configuration \"/etc/postgresql/13/main/pg_hba.conf\" : Aucun fichier ou répertoire de ce type
2025-06-05 02:40:52.324 UTC [1886] FATAL:  impossible de charger pg_hba.conf
2025-06-05 02:40:52.327 UTC [1886] LOG:  le système de base de données est arrêté
 arrêté d'attendre
pg_ctl : impossible de démarrer le serveur
Examinez la sortie du journal.
 
 
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 « J'aime »