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

postgres-ts-vectors

Image Docker de PostgreSQL avec TimescaleDB, VectorChord, pgvector et PostGIS déjà installés.

CI PostgreSQL 15, 16, 17 et 18 TimescaleDB 2.28.3 VectorChord 1.1.1 pgvector 0.8 PostGIS 3 Docker, une image par version de PostgreSQL

Présentation

Une image par version majeure de PostgreSQL, prête à servir des séries temporelles, de la recherche vectorielle et des données géographiques dans la même base :

Les extensions sont créées au premier démarrage, dans la base du conteneur. L'image part de celle de VectorChord, mise à niveau à la construction : docs/architecture.md.

Images

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

TimescaleDB et VectorChord sont épinglés. PostgreSQL, pgvector et PostGIS suivent leurs versions mineures : les images sont reconstruites dès qu'apt en propose (Mises à jour). Les versions exactes se lisent dans un conteneur :

docker exec ma-base psql -U postgres -Atc "select version()" \
  -c "select extname, extversion from pg_extension"

Démarrage rapide

docker run -d \
  --name ma-base \
  -e POSTGRES_PASSWORD=motdepasse \
  -v donnees_pg:/var/lib/postgresql \
  -p 5432:5432 \
  gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:pg18

Le point de montage du volume dépend de la version de PostgreSQL :

Étiquette Monter le volume sur
pg15, pg16, pg17, latest /var/lib/postgresql/data
pg18 /var/lib/postgresql

Sur l'autre chemin, les données d'une image jusqu'à PostgreSQL 17 partent dans un volume anonyme, perdu quand le conteneur est recréé, et l'image pg18 refuse de démarrer.

Configuration

Variable Rôle Défaut
POSTGRES_PASSWORD Mot de passe, obligatoire aucun
POSTGRES_USER Utilisateur postgres
POSTGRES_DB Base, où les extensions sont créées le nom de l'utilisateur

Ce sont les variables de l'image officielle postgres. Une commande qui remplace celle de l'image doit garder -c shared_preload_libraries=timescaledb,vchord, sans quoi TimescaleDB et VectorChord ne sont pas chargés.

Utilisation

-- Série temporelle
CREATE TABLE mesures (time TIMESTAMPTZ NOT NULL, capteur INTEGER, temperature DOUBLE PRECISION);
SELECT create_hypertable('mesures', 'time');

-- Recherche vectorielle
CREATE TABLE documents (id SERIAL PRIMARY KEY, contenu TEXT, embedding vector(1536));
CREATE INDEX ON documents USING vchordrq (embedding vector_l2_ops);
SELECT * FROM documents ORDER BY embedding <-> '[0.1, 0.2, ...]' LIMIT 10;

-- Géographie
CREATE TABLE lieux (id SERIAL PRIMARY KEY, geom geometry(Point, 4326));
SELECT ST_Distance(a.geom, b.geom) FROM lieux a, lieux b WHERE a.id = 1 AND b.id = 2;

Mises à jour

Chaque nuit, la CI teste les images publiées et reconstruit celles pour lesquelles apt propose des mises à jour : versions mineures de PostgreSQL, pgvector, PostGIS, correctifs Debian. Une version de TimescaleDB ou de VectorChord se change à la main, car une base existante doit alors être mise à niveau : docs/exploitation/publication.md.

Tests

docker build --build-arg PG_VERSION=18 -t postgres-ts-vectors:pg18 .
./tests.sh postgres-ts-vectors:pg18

tests.sh démarre l'image, vérifie les extensions, les exerce, redémarre le serveur et, avec une seconde image en argument, reprend une base créée par celle-ci. La CI lance la même commande avant de publier. Détail dans CLAUDE.md.

Documentation

Licences

Le dépôt est sous licence Apache 2.0. Les extensions gardent la leur : TimescaleDB, VectorChord, pgvector, PostGIS (GPL v2 ou ultérieure).

Image réalisée par Maxime Killinger.

S
Description
No description provided
Readme
104 KiB
0 Stars 1 Watchers 0 Forks
Languages
Shell 51.5%
Dockerfile 48.5%