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 @@
-
+
@@ -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