Files
postgres-ts-vectors/docs/decisions/0002-paquets-a-jour-et-en-tetes-du-serveur.md
maxime.killinger 7de55c5655
🚀 Docker Build and Push / build-and-push (15) (push) Successful in 5m29s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 6m10s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 5m20s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 5m21s
PG18 de retour, mises à jour nocturnes, tests de reprise et documentation
Image
- Étape `base` commune : tous les paquets sont mis à niveau (PostgreSQL à la
  dernière mineure, pgvector, Debian). L'image de base de VectorChord restait
  figée à la version de sa publication.
- En-têtes du serveur épinglés sur la version du serveur installé. PG18 avait
  été retiré parce que TimescaleDB, compilé avec des en-têtes 18.6, était chargé
  par un serveur 18.3 (`undefined symbol: palloc0_mul`).
- Sonde de santé avec l'utilisateur et la base du conteneur : en `postgres`,
  elle écrivait une erreur FATAL au journal dès que POSTGRES_USER était défini.
- Label `base.name` corrigé : il reprenait la version du paquet au lieu de la
  version majeure.

CI
- PG18 ajouté à la matrice.
- Exécution nocturne : apt est interrogé dans l'image publiée ; elle n'est
  reconstruite et republiée que s'il lui reste des mises à jour, sinon elle est
  seulement testée. Lancement manuel possible.
- `docker-build.yml` supprimé : l'ancien workflow à actions externes tournait
  encore à chaque push, en double de `docker.yml`.
- `paths-ignore` : un push de documentation seule ne lance pas la CI.
- Labels `version`, `url` et `fr.killinger.apt-refresh`.

Tests
- `tests.sh`, la même commande en local et en CI : utilisateur et base autres
  que `postgres`, version majeure du serveur, présence des cinq extensions,
  redémarrage, et reprise d'une base créée par l'image publiée.

Documentation
- README en vitrine, CLAUDE.md, docs/architecture.md,
  docs/exploitation/publication.md, six décisions, docs/a-faire.md.
2026-10-02 17:55:42 +02:00

1.9 KiB

0002 — Paquets mis à niveau à la construction, en-têtes épinglés sur le serveur

Contexte

L'image de base n'est republiée qu'à chaque version de VectorChord. Entre deux, son PostgreSQL prend du retard sur les versions mineures et les correctifs de sécurité : une image de base contenait PostgreSQL 18.3 quand le dépôt PGDG en était à 18.6, avec une trentaine d'autres paquets en retard.

La compilation de TimescaleDB installe les en-têtes du serveur par apt, donc dans la dernière version. Compilé avec des en-têtes 18.6 puis chargé par un serveur 18.3, TimescaleDB échouait à la création de l'extension (undefined symbol: palloc0_mul), sans erreur à la compilation. PostgreSQL 18 avait été retiré de la CI pour cette raison.

Décision

  • Une étape base, commune à la compilation et à l'image finale, met tous les paquets à niveau (apt-get upgrade --with-new-pkgs). Le serveur publié est donc à la dernière version mineure.
  • L'étape de compilation installe les en-têtes dans la version exacte du serveur installé, lue par dpkg-query, et non dans la dernière disponible.
  • La couche de mise à niveau porte une clé de cache, l'argument APT_REFRESH.

Conséquences

  • PostgreSQL 18 est de nouveau construit et publié.
  • Serveur et en-têtes ne peuvent plus diverger : si la version voulue des en-têtes n'est plus dans le dépôt, la construction échoue au lieu de produire une image qui ne charge pas TimescaleDB.
  • La variable d'environnement PG_VERSION héritée de l'image de base n'est plus la version du serveur.
  • Sans changement de APT_REFRESH, le cache garde la mise à niveau telle qu'elle a été faite : c'est la CI qui décide quand la rejouer (0005).

Attestée par

Dockerfile (étapes base et builder) ; commit dcf4169, qui avait retiré PostgreSQL 18.