GitLab Omnibus Update PostgreSQL-Datenbank Problem

Ursache des Problems:

Durch eine fehlerhafte Einschätzung, dass die GitLab Omnibus Version bereits mit Debian 13 (Trixie) kompatibel sei, habe ich mir eine PostgreSQL-Datenbank Problem eingehandelt.

Ich habe meine Fehlerquelle ausführlich im GitLab-Forum beschrieben.

Die Ausgangsposition ist das ich fälschlicherweise zu früh das darunterliegende Betriebsystem von Debian 12 nach Debian 13 aktualisiert habe wo es noch keine offiziele Unterstützung seitens GitLab dafür gab.

Die Ausgangslage war, dass ich das Betriebssystem von Debian 12 auf Debian 13 aktualisiert hatte, obwohl GitLab zu diesem Zeitpunkt noch keine offizielle Unterstützung für die neueste Debian-Version bot. Infolgedessen trat eine PostgreSQL-Fehlermeldung auf, und GitLab konnte nicht mehr gestartet werden.

STDOUT:
STDERR: WARNING:  database "postgres" has a collation version mismatch
DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE postgres REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
createdb: error: database creation failed: ERROR:  template database "template1" has a collation version mismatch
DETAIL:  The template database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in the template database that use the default collation and run ALTER DATABASE template1 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
---- End output of /opt/gitlab/embedded/bin/createdb --port 5432 -h /var/opt/gitlab/postgresql -O registry registry ----
Ran /opt/gitlab/embedded/bin/createdb --port 5432 -h /var/opt/gitlab/postgresql -O registry registry returned 1
===
Ein weiterer Versuch mit offizieller Unterstützung:

Nachdem GitLab mittlerweile offiziell Debian 13 (Trixie) unterstützt, versuchte ich ein erneutes Update. Leider führte auch dieser Versuch nicht zum Erfolg. Die Fehlermeldung blieb bestehen, und ein Update war weiterhin nicht möglich. Also entschied ich mich, erneut ein Downgrade vorzunehmen und die PostgreSQL-Datenbank manuell zu bearbeiten.

Ab hier:use at your own risk!

Lösung durch externe Hilfe:

Im Zuge meiner weiteren Recherche stieß ich auf diesen Link, der mir bei der Lösung des Problems weitere Hinweise lieferte.

Durch die Verbindung mit der PostgreSQL-Datenbank kann man das Problem und die zugrunde liegende Ursache sichtbar machen.

:~# su - gitlab-psql
:~$ /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d postgres
[...]
postgres=# SELECT datname, datcollversion FROM pg_database;
       datname       | datcollversion
---------------------+----------------
 template0           |
 template1           | 2.36
 gitlabhq_production | 2.36
 postgres            | 2.36
(4 rows)

Der REINDEX-Befehl war vermutlich nicht zwingend erforderlich, aber in meinem Versuch habe ich ihn dennoch ausgeführt.

postgres=# REINDEX (VERBOSE) DATABASE postgres;
INFO:  index "pg_toast_13323_index" was reindexed
DETAIL:  CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO:  table "information_schema.sql_features" was reindexed
INFO:  index "pg_toast_13328_index" was reindexed
DETAIL:  CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO:  table "information_schema.sql_implementation_info" was reindexed
INFO:  index "pg_toast_13333_index" was reindexed
DETAIL:  CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO:  table "information_schema.sql_parts" was reindexed
INFO:  index "pg_toast_13338_index" was reindexed
DETAIL:  CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO:  table "information_schema.sql_sizing" was reindexed
REINDEX

postgres=# ALTER DATABASE postgres REFRESH COLLATION VERSION;
NOTICE:  changing version from 2.36 to 2.41
ALTER DATABASE
Wiederholung der Schritte:

Die gleichen Schritte müssen auch für die beiden anderen Datenbanken zwingend wiederholt werden, um das Problem komplett zu beheben.

:~# su - gitlab-psql
:~$ /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d gitlabhq_production

gitlabhq_production=# REINDEX (VERBOSE) DATABASE gitlabhq_production;
[...]

gitlabhq_production=# ALTER DATABASE gitlabhq_production REFRESH COLLATION VERSION;
NOTICE:  changing version from 2.36 to 2.41
ALTER DATABASE
:~# su - gitlab-psql
:~$ /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d template1

template1=# REINDEX (VERBOSE) DATABASE template1;
[...]

template1=# ALTER DATABASE template1 REFRESH COLLATION VERSION;
NOTICE:  changing version from 2.36 to 2.41
ALTER DATABASE

Zur Kontrolle kann der oben genannte Aufruf auch in jedem Zwischenschritt wiederholt werden.

template1=# SELECT datname, datcollversion FROM pg_database;
       datname       | datcollversion
---------------------+----------------
 template0           |
 postgres            | 2.41
 gitlabhq_production | 2.41
 template1           | 2.41
(4 rows)
Erfolgreiches Update:

Nach diesem Schritt konnte das Update der GitLab-Installation von Version 18.2.4-ce.0 auf 18.5.0-ce.0 problemlos durchgeführt werden. Im Hintergrund laufen verschiedene Prozesse, die abgewartet werden sollten. Zum Abschluss habe ich einen vollständigen Reboot durchgeführt. Inzwischen wurde auch ein weiteres Patch-Release, Version 18.5.1-ce.0, veröffentlicht.