# 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](0005-mises-a-jour-nocturnes-pilotees-par-apt.md)). ## Attestée par `Dockerfile` (étapes `base` et `builder`) ; commit `dcf4169`, qui avait retiré PostgreSQL 18.