From a57c520610a155128a4d2c24864be08acef84f22 Mon Sep 17 00:00:00 2001 From: Maxime Killinger Date: Fri, 2 Oct 2026 18:02:35 +0200 Subject: [PATCH] =?UTF-8?q?TimescaleDB=202.30.2=20pour=20PostgreSQL=2016?= =?UTF-8?q?=20=C3=A0=2018,=202.28.3=20gard=C3=A9=20pour=20PostgreSQL=2015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TIMESCALEDB_VERSION passe de 2.28.3 à 2.30.2. Vérifié pour 16, 17 et 18 : compilation, tests, et reprise d'une base créée par l'image publiée après `ALTER EXTENSION timescaledb UPDATE`. - TimescaleDB 2.29 a retiré PostgreSQL 15 (`Unsupported PostgreSQL version` à la compilation) : `pg15` garde 2.28.3 par TIMESCALEDB_VERSION_PG15. - Décision 0007, tableau et badge du README, procédure de changement de version. Une base existante refuse toute requête sur la nouvelle image tant que l'extension n'est pas mise à niveau : voir docs/exploitation/publication.md. --- CLAUDE.md | 10 ++++--- Dockerfile | 9 ++++--- README.md | 12 +++++---- docs/a-faire.md | 8 +++--- ...07-postgresql-15-garde-timescaledb-2-28.md | 27 +++++++++++++++++++ docs/exploitation/publication.md | 18 +++++++++---- 6 files changed, 62 insertions(+), 22 deletions(-) create mode 100644 docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md diff --git a/CLAUDE.md b/CLAUDE.md index 9684f11..241495f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,8 +15,8 @@ docker build --build-arg PG_VERSION=17 -t postgres-ts-vectors:pg17 . # Rejouer la mise à niveau des paquets, que le cache garderait sinon telle quelle docker build --build-arg PG_VERSION=17 --build-arg APT_REFRESH=$(date +%F) -t postgres-ts-vectors:pg17 . -# Essayer une autre version de TimescaleDB sans toucher au Dockerfile -docker build --build-arg PG_VERSION=17 --build-arg TIMESCALEDB_VERSION=2.30.2 -t postgres-ts-vectors:essai . +# Essayer une autre version de TimescaleDB sans toucher au Dockerfile (X.Y.Z : étiquette Git) +docker build --build-arg PG_VERSION=17 --build-arg TIMESCALEDB_VERSION=X.Y.Z -t postgres-ts-vectors:essai . # Tests de l'image ./tests.sh postgres-ts-vectors:pg17 @@ -49,7 +49,9 @@ docker run --rm --entrypoint sh gitea.killinger.fr/maxime.killinger/postgres-ts- l'image de base. - **Versions épinglées dans le Dockerfile** ([0003](docs/decisions/0003-versions-de-timescaledb-et-vectorchord-epinglees.md)) : - `TIMESCALEDB_VERSION` et `VCHORD_VERSION`. Les changer suit la procédure de + `TIMESCALEDB_VERSION`, `TIMESCALEDB_VERSION_PG15` + ([0007](docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md)) et `VCHORD_VERSION`. + Les changer suit la procédure de [docs/exploitation/publication.md](docs/exploitation/publication.md), et met à jour le tableau et les badges du `README.md`. - **Le reste vient d'apt, à jour** @@ -74,7 +76,7 @@ docker run --rm --entrypoint sh gitea.killinger.fr/maxime.killinger/postgres-ts- - **Changer la version de TimescaleDB rend une base existante inutilisable jusqu'à sa mise à niveau.** L'image ne contient que la bibliothèque de sa version : toute requête échoue - avec `could not access file "$libdir/timescaledb-2.28.3"` tant que + avec `could not access file "$libdir/timescaledb-X.Y.Z"` tant que `ALTER EXTENSION timescaledb UPDATE` n'a pas été exécuté, en première instruction d'une session `psql -X`. `pg_isready` répond pourtant, et le conteneur paraît sain. - **Des en-têtes plus récents que le serveur cassent TimescaleDB au chargement** diff --git a/Dockerfile b/Dockerfile index 79f59d1..8e88f09 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,10 +37,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ postgresql-server-dev-$PG_MAJOR="$(dpkg-query -W -f='${Version}' postgresql-$PG_MAJOR)" \ && rm -rf /var/lib/apt/lists/* -# TimescaleDB compilé depuis l'étiquette de la version stable -ARG TIMESCALEDB_VERSION=2.28.3 +# TimescaleDB compilé depuis l'étiquette de la version stable. +# TimescaleDB 2.29 a abandonné PostgreSQL 15, qui garde la dernière version qui le gère. +ARG TIMESCALEDB_VERSION=2.30.2 +ARG TIMESCALEDB_VERSION_PG15=2.28.3 WORKDIR /build/timescaledb -RUN git clone --branch ${TIMESCALEDB_VERSION} --depth 1 https://github.com/timescale/timescaledb.git . \ +RUN if [ "$PG_MAJOR" = 15 ]; then version="$TIMESCALEDB_VERSION_PG15"; else version="$TIMESCALEDB_VERSION"; fi \ + && git clone --branch "$version" --depth 1 https://github.com/timescale/timescaledb.git . \ && ./bootstrap -DREGRESS_CHECKS=OFF -DWARNINGS_AS_ERRORS=OFF \ && cd build && make -j$(nproc) && make install DESTDIR=/tmp/timescaledb diff --git a/README.md b/README.md index 88265f9..112c600 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

CI PostgreSQL 15, 16, 17 et 18 - TimescaleDB 2.28.3 + TimescaleDB 2.30.2 VectorChord 1.1.1 pgvector 0.8 PostGIS 3 @@ -31,11 +31,13 @@ Publiées sous `gitea.killinger.fr/maxime.killinger/postgres-ts-vectors`. | Étiquette | PostgreSQL | TimescaleDB | VectorChord | pgvector | PostGIS | |---|---|---|---|---|---| | `pg15` | 15 | 2.28.3 | 1.1.1 | 0.8 | 3 | -| `pg16` | 16 | 2.28.3 | 1.1.1 | 0.8 | 3 | -| `pg17`, `latest` | 17 | 2.28.3 | 1.1.1 | 0.8 | 3 | -| `pg18` | 18 | 2.28.3 | 1.1.1 | 0.8 | 3 | +| `pg16` | 16 | 2.30.2 | 1.1.1 | 0.8 | 3 | +| `pg17`, `latest` | 17 | 2.30.2 | 1.1.1 | 0.8 | 3 | +| `pg18` | 18 | 2.30.2 | 1.1.1 | 0.8 | 3 | -TimescaleDB et VectorChord sont épinglés. PostgreSQL, pgvector et PostGIS suivent leurs +TimescaleDB et VectorChord sont épinglés ; `pg15` garde la dernière version de TimescaleDB +qui gère PostgreSQL 15 +([0007](docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md)). PostgreSQL, pgvector et PostGIS suivent leurs versions mineures : les images sont reconstruites dès qu'apt en propose ([Mises à jour](#mises-à-jour)). Les versions exactes se lisent dans un conteneur : diff --git a/docs/a-faire.md b/docs/a-faire.md index 772ed80..6a281ed 100644 --- a/docs/a-faire.md +++ b/docs/a-faire.md @@ -4,11 +4,9 @@ Ce fichier ne contient que l'ouvert. Un point terminé est supprimé. ## Versions -- **TimescaleDB 2.30.2 est disponible**, l'image épingle 2.28.3. Vérifié sur PostgreSQL 17 : - la 2.30.2 compile, passe les tests et reprend une base créée en 2.28.3 après - `ALTER EXTENSION timescaledb UPDATE`. Reste à le vérifier pour 15, 16 et 18, puis à suivre - la procédure de [exploitation/publication.md](exploitation/publication.md), base de Health - comprise. +- **`pg15` ne recevra plus de version de TimescaleDB** + ([0007](decisions/0007-postgresql-15-garde-timescaledb-2-28.md)). À retirer de la matrice + quand plus aucune base ne l'utilise. ## CI diff --git a/docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md b/docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md new file mode 100644 index 0000000..9aaf4f9 --- /dev/null +++ b/docs/decisions/0007-postgresql-15-garde-timescaledb-2-28.md @@ -0,0 +1,27 @@ +# 0007 — PostgreSQL 15 garde TimescaleDB 2.28 + +Complète [0003](0003-versions-de-timescaledb-et-vectorchord-epinglees.md). + +## Contexte + +TimescaleDB 2.29 a retiré la prise en charge de PostgreSQL 15 : à partir de cette version, la +compilation contre PostgreSQL 15 échoue (`Unsupported PostgreSQL version`). Les images +`pg16`, `pg17` et `pg18` passent à TimescaleDB 2.30. + +## Décision + +- Le Dockerfile porte deux versions : `TIMESCALEDB_VERSION` pour PostgreSQL 16 et suivants, + `TIMESCALEDB_VERSION_PG15` pour PostgreSQL 15, fixée à la dernière version qui le gère. +- `pg15` reste publiée et continue de recevoir les mises à jour d'apt. + +## Conséquences + +- `pg15` ne reçoit plus ni fonctionnalité ni correctif de TimescaleDB. +- Les quatre images n'ont plus la même version de TimescaleDB : une base ne passe pas de + `pg15` à une autre étiquette sans mise à niveau de l'extension. +- Le jour où une autre version de PostgreSQL est abandonnée par TimescaleDB, le même + mécanisme est à généraliser, ou la version à retirer. + +## Attestée par + +`Dockerfile` (étape `builder`). diff --git a/docs/exploitation/publication.md b/docs/exploitation/publication.md index 47f5344..dab0e72 100644 --- a/docs/exploitation/publication.md +++ b/docs/exploitation/publication.md @@ -61,21 +61,29 @@ SELECT postgis_extensions_upgrade(); 1. Construire et tester en local contre l'image publiée, pour chaque version de PostgreSQL : ```bash - docker build --build-arg PG_VERSION=17 --build-arg TIMESCALEDB_VERSION=2.30.2 -t postgres-ts-vectors:essai . + docker build --build-arg PG_VERSION=17 --build-arg TIMESCALEDB_VERSION=X.Y.Z -t postgres-ts-vectors:essai . docker pull gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:pg17 ./tests.sh postgres-ts-vectors:essai gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:pg17 ``` Une version de TimescaleDB qui abandonne une version de PostgreSQL échoue à la - compilation : cette version de PostgreSQL sort alors de la matrice, ou garde l'ancienne - version de TimescaleDB. + compilation (`Unsupported PostgreSQL version`). Cette version de PostgreSQL sort alors de + la matrice, ou garde sa propre version de TimescaleDB, comme PostgreSQL 15 + ([0007](../decisions/0007-postgresql-15-garde-timescaledb-2-28.md)). 2. Changer `TIMESCALEDB_VERSION` dans le `Dockerfile`, le tableau et le badge du `README.md`. 3. Prévenir les exploitants **avant** de pousser. Dès qu'un conteneur est recréé sur la nouvelle image, sa base refuse toute requête jusqu'à l'exécution de : ```bash docker exec -it psql -X -U -d -c 'ALTER EXTENSION timescaledb UPDATE' ``` - La commande est à passer dans chaque base qui a l'extension. `-X` et une session neuve - sont nécessaires : l'instruction doit être la première de la session. + La commande est à passer dans chaque base du serveur qui a l'extension, `postgres` + comprise si elle l'a. `-X` et une session neuve sont nécessaires : l'instruction doit être + la première de la session. Les bases se relèvent **avant** de recréer le conteneur, tant + que toutes répondent : + ```sql + SELECT datname FROM pg_database WHERE datallowconn AND NOT datistemplate; -- les bases + SELECT extversion FROM pg_extension WHERE extname = 'timescaledb'; -- dans chacune + ``` + Les applications qui gardaient des connexions ouvertes sont à redémarrer. ## Changer la version de VectorChord