🔝 Retour au Sommaire
Comprendre comment PostgreSQL gère ses versions est essentiel pour tout professionnel travaillant avec ce SGBD. Dans ce chapitre, nous allons explorer le système de numérotation des versions, le cycle de vie des releases, et découvrir les spécificités de PostgreSQL 18, la version la plus récente sortie en septembre 2025.
Cette connaissance vous permettra de planifier vos mises à jour, anticiper les changements et maintenir vos systèmes de manière sécurisée et efficace.
PostgreSQL a changé son système de numérotation au fil du temps. Comprendre cette évolution aide à interpréter les versions que vous pourriez rencontrer.
Format : MAJEUR.MINEUR.PATCH
Exemple : PostgreSQL 9.6.24
- 9 = Version majeure
- 6 = Version mineure (avec nouvelles fonctionnalités)
- 24 = Patch de correction de bugs
Particularité importante : Dans ce système, le changement de version mineure (par exemple 9.5 → 9.6) était considéré comme une version majeure nécessitant une procédure de migration complète.
Format simplifié : MAJEUR.PATCH
Exemple : PostgreSQL 18.3
- 18 = Version majeure
- 3 = Patch de correction de bugs
Changement majeur : La numérotation est devenue plus simple et plus claire. Chaque changement du premier chiffre représente une version majeure.
Fréquence : Une version majeure par an (généralement en septembre/octobre)
Exemples :
- PostgreSQL 14 (septembre 2021)
- PostgreSQL 15 (octobre 2022)
- PostgreSQL 16 (septembre 2023)
- PostgreSQL 17 (septembre 2024)
- PostgreSQL 18 (septembre 2025) ← Version actuelle
Caractéristiques :
- ✅ Nouvelles fonctionnalités majeures
- ✅ Améliorations de performance significatives
- ✅ Changements dans l'architecture interne
- ✅ Nouvelles APIs et extensions
Fréquence : Tous les 2-3 mois environ
Exemples :
- PostgreSQL 18.0 (version initiale - septembre 2025)
- PostgreSQL 18.1 (novembre 2025)
- PostgreSQL 18.2 (février 2026)
- PostgreSQL 18.3 (mai 2026)
Caractéristiques :
-
✅ Corrections de bugs
-
✅ Corrections de sécurité
-
✅ Corrections de corruption de données
-
✅ Corrections de problèmes de crash
-
❌ Aucune nouvelle fonctionnalité
-
❌ Aucun changement de comportement (sauf corrections de bugs)
Dans psql ou n'importe quel client PostgreSQL :
SELECT version();Exemple de sortie :
PostgreSQL 18.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 13.2.0, 64-bit
Décomposition de l'information :
- 18.3 : Version majeure 18, patch 3
- x86_64-pc-linux-gnu : Architecture et système d'exploitation
- gcc (GCC) 13.2.0 : Compilateur utilisé
- 64-bit : Architecture 64 bits
Version courte :
SHOW server_version;Sortie :
18.3
Chaque version majeure de PostgreSQL passe par plusieurs phases :
Période : De la sortie de la version précédente jusqu'aux premières bêtas
Activités :
- Développement de nouvelles fonctionnalités
- Discussions communautaires sur les nouvelles features
- Commit Fests (périodes de revue et d'intégration)
- Tests internes
Visibilité publique : Code disponible dans le dépôt Git, mais non stable
Période : Mai/Juin jusqu'à septembre
Activités :
- Publication de versions bêta (Beta 1, Beta 2, Beta 3...)
- Tests par la communauté
- Corrections de bugs découverts
- Stabilisation du code
- Gel des fonctionnalités (feature freeze)
Utilisation recommandée : Tests en environnement de développement/staging uniquement
Période : Août/Septembre
Activités :
- Version presque finale
- Derniers tests intensifs
- Corrections de bugs critiques uniquement
- Préparation de la documentation finale
Utilisation recommandée : Tests finaux avant production
Date typique : Septembre/Octobre
Exemple : PostgreSQL 18.0 - Septembre 2025
Caractéristiques :
- Version stable prête pour la production
- Documentation complète
- Début de la période de support officiel
Période : De la release jusqu'à 5 ans après
Activités :
- Corrections de bugs régulières
- Patches de sécurité
- Mises à jour mineures (18.1, 18.2, 18.3...)
- Support communautaire actif
Fréquence des patches : Environ tous les 2-3 mois, avec des releases coordonnées pour toutes les versions supportées
Date : 5 ans après la release initiale
Exemple : PostgreSQL 13, sorti en septembre 2020, atteindra sa fin de vie en novembre 2025
Conséquences :
- ❌ Plus de patches de sécurité
- ❌ Plus de corrections de bugs
- ❌ Plus de support officiel
⚠️ Risque de sécurité si vous continuez à l'utiliser
PostgreSQL maintient officiellement les 5 dernières versions majeures.
En novembre 2025, les versions supportées sont :
| Version | Date de Release | Fin de Support (EOL) | Statut |
|---|---|---|---|
| PostgreSQL 18 | Septembre 2025 | Novembre 2030 | ✅ Actuelle |
| PostgreSQL 17 | Septembre 2024 | Novembre 2029 | ✅ Supportée |
| PostgreSQL 16 | Septembre 2023 | Novembre 2028 | ✅ Supportée |
| PostgreSQL 15 | Octobre 2022 | Novembre 2027 | ✅ Supportée |
| PostgreSQL 14 | Septembre 2021 | Novembre 2026 | ✅ Supportée |
| PostgreSQL 13 | Septembre 2020 | Novembre 2025 | |
| PostgreSQL 12 | Octobre 2019 | Novembre 2024 | ❌ EOL |
Important : Même si une version est techniquement fonctionnelle après sa fin de vie, continuer à l'utiliser en production expose votre système à des risques de sécurité.
PostgreSQL 18 représente une avancée majeure, avec un accent particulier sur :
- Performance I/O : Jusqu'à 3× plus rapide dans certains scénarios
- Modernisation de la sécurité : OAuth 2.0, améliorations TLS
- Nouvelles capacités de données : Colonnes virtuelles, UUIDv7
- Améliorations de l'upgrade : Migration simplifiée
- Optimisations du planificateur : Requêtes plus intelligentes
Contexte : Historiquement, PostgreSQL utilisait des opérations I/O synchrones (bloquantes).
Nouveauté : PostgreSQL 18 introduit un sous-système I/O asynchrone optionnel.
Impact :
- Gains de performance jusqu'à 3× sur certaines charges de travail
- Meilleure utilisation du matériel moderne (NVMe, SSD)
- Réduction de la latence pour les opérations de lecture/écriture
Configuration :
-- Nouveau paramètre io_method
ALTER SYSTEM SET io_method = 'worker'; -- Défaut
-- Options possibles :
-- 'sync' : I/O synchrone classique (compatibilité)
-- 'worker' : I/O asynchrone via processus dédiés (défaut PG 18)
-- 'io_uring': I/O asynchrone via io_uring (Linux uniquement, performances maximales)Cas d'usage : Particulièrement bénéfique pour les applications avec beaucoup de lectures/écritures concurrentes sur du stockage moderne (NVMe, SSD).
Contexte : PostgreSQL 12 a introduit les colonnes générées stockées (valeurs calculées et sauvegardées).
Nouveauté : PostgreSQL 18 ajoute les colonnes virtuelles (calculées à la volée).
Exemple conceptuel :
CREATE TABLE produits (
id SERIAL PRIMARY KEY,
prix_ht NUMERIC(10,2),
tva NUMERIC(4,2),
-- Colonne virtuelle : calculée à la lecture, non stockée
prix_ttc NUMERIC(10,2) GENERATED ALWAYS AS (prix_ht * (1 + tva)) VIRTUAL
);Avantages :
- Économie d'espace disque
- Pas de maintenance (pas besoin de mettre à jour)
- Toujours à jour automatiquement
Différence avec STORED :
- STORED : Valeur calculée et sauvegardée sur disque
- VIRTUAL : Valeur calculée à chaque lecture (ne prend pas d'espace)
Contexte : Les UUID (Universally Unique IDentifier) sont très utilisés comme clés primaires.
Problème des UUIDv4 : Complètement aléatoires, ils causent une fragmentation d'index et dégradent les performances.
Nouveauté : PostgreSQL 18 supporte UUIDv7, qui inclut un timestamp.
Avantages :
- Ordonnés chronologiquement (meilleure performance d'indexation)
- Toujours globalement uniques
- Compatibles avec les applications existantes
Fonction :
SELECT uuidv7(); -- Nouveau ! Génère un UUIDv7 avec timestamp intégré
-- PostgreSQL 18 ajoute aussi uuidv4() comme alias de gen_random_uuid()Contexte : L'authentification traditionnelle utilise des mots de passe stockés.
Nouveauté : Support natif de OAuth 2.0 pour l'authentification.
Avantages :
- Intégration avec les systèmes d'identité modernes (Azure AD, Okta, etc.)
- Single Sign-On (SSO)
- Pas de stockage de mots de passe dans PostgreSQL
- Révocation centralisée des accès
Configuration : Via pg_hba.conf avec la méthode oauth.
Nouveauté : Possibilité de définir des contraintes qui prennent en compte des périodes de temps.
Cas d'usage : Réservations, historiques, validité temporelle.
Exemple conceptuel :
-- Empêcher les chevauchements de périodes
CREATE TABLE reservations (
id SERIAL PRIMARY KEY,
salle_id INTEGER,
date_debut TIMESTAMP,
date_fin TIMESTAMP,
CONSTRAINT pas_de_chevauchement
EXCLUDE USING gist (
salle_id WITH =,
tsrange(date_debut, date_fin) WITH &&
)
);Cette contrainte garantit qu'une salle ne peut pas être réservée deux fois en même temps.
PostgreSQL 18 inclut plusieurs optimisations intelligentes :
a) Auto-élimination des Self-Joins
Le planificateur détecte automatiquement les self-joins redondants et les élimine.
Exemple :
-- Cette requête avec un self-join inutile...
SELECT a.nom
FROM employes a
JOIN employes b ON a.id = b.id;
-- ...est automatiquement optimisée en :
SELECT nom FROM employes;b) Transformation OR → ANY
Les clauses OR multiples sont automatiquement transformées en ANY pour de meilleures performances.
c) Skip Scan sur Index Multi-Colonnes
Meilleure utilisation des index composites même quand la première colonne n'est pas dans la requête.
Nouveauté : Gestion améliorée du marqueur de fin \. dans les fichiers CSV.
Impact : Import de données plus robuste et prévisible.
Contexte : La clause RETURNING permet de récupérer les valeurs après INSERT/UPDATE/DELETE.
Nouveauté : Possibilité d'accéder aux valeurs avant ET après modification.
Exemple conceptuel :
UPDATE produits
SET prix = prix * 1.1
RETURNING OLD.prix as ancien_prix, NEW.prix as nouveau_prix; Nouveautés :
- Préservation des statistiques de l'ancien cluster
- Option
--swappour upgrade ultra-rapide (hard links) - Vérifications parallèles avec
--jobs
Impact : Migrations majeures beaucoup plus rapides et fiables.
Contexte : Les checksums détectent la corruption de données.
Nouveauté : Activés par défaut lors de l'initialisation d'un nouveau cluster.
Impact : Meilleure détection de corruption, petite surcharge de performance (< 5%).
Désactivation : initdb --no-data-checksums (non recommandé).
Nouveauté : Nouvelles colonnes dans pg_stat_all_tables pour VACUUM et ANALYZE.
Nouveauté : Statistiques I/O et WAL par backend disponibles.
Impact : Meilleur monitoring et debugging.
Nouveauté : Nouveau paramètre autovacuum_vacuum_max_threshold pour mieux contrôler l'autovacuum.
Nouveauté : Ajustements dynamiques du nombre de workers (autovacuum_worker_slots).
Impact : Maintenance automatique plus efficace.
Nouveauté : Support du mode FIPS (Federal Information Processing Standards).
Nouveauté : Configuration fine de TLS 1.3 avec ssl_tls13_ciphers.
Impact : Conformité renforcée pour les environnements sensibles (gouvernemental, militaire, finance).
Exemple : 18.1 → 18.2
Recommandation : ✅ Appliquez-les systématiquement et rapidement
Raisons :
- Corrections de sécurité critiques
- Corrections de bugs pouvant causer des pertes de données
- Aucun risque de régression (rétrocompatibilité garantie)
- Procédure simple et rapide
Fréquence : Suivez les releases (tous les 2-3 mois)
Exemple : PostgreSQL 17 → PostgreSQL 18
Recommandation :
Approche recommandée :
-
Phase 1 : Veille (Mois 0-3)
- Lisez les release notes
- Identifiez les fonctionnalités utiles
- Repérez les changements incompatibles
-
Phase 2 : Tests (Mois 3-6)
- Testez en environnement de développement
- Testez en environnement de staging
- Exécutez votre suite de tests
- Benchmarkez les performances
-
Phase 3 : Migration (Mois 6-12)
- Planifiez la fenêtre de maintenance
- Préparez un plan de rollback
- Migrez avec pg_upgrade ou réplication logique
- Surveillez intensivement post-migration
Timing idéal :
- Attendez 6-12 mois après la release initiale
- Attendez les premiers patches (18.1, 18.2) qui corrigent les bugs initiaux
- Ne restez pas sur une version qui approche de sa fin de vie
Principe : Conversion en place des fichiers de données.
Avantages :
- ✅ Très rapide (quelques minutes à quelques heures)
- ✅ Peu de downtime
- ✅ Recommandé pour la plupart des cas
Inconvénients :
⚠️ Nécessite un espace disque temporaire⚠️ Nécessite un arrêt du service
Nouveauté PostgreSQL 18 :
- Option
--swappour upgrade ultra-rapide - Préservation des statistiques
- Vérifications parallèles
Principe : Export logique puis import dans la nouvelle version.
Avantages :
- ✅ Fonctionne toujours
- ✅ Permet de restructurer / nettoyer
- ✅ Réorganise les données (défragmentation)
Inconvénients :
- ❌ Très lent pour les grosses bases (heures/jours)
- ❌ Downtime important
Cas d'usage :
- Bases de données petites/moyennes
- Migration avec restructuration
- Changement de serveur
Principe : Réplication vers une nouvelle instance PostgreSQL 18, puis bascule.
Avantages :
- ✅ Downtime quasi nul (quelques secondes)
- ✅ Possibilité de rollback facile
- ✅ Idéal pour la production critique
Inconvénients :
- ❌ Plus complexe à mettre en œuvre
- ❌ Nécessite plus de ressources (2 clusters en parallèle)
Cas d'usage : Production critique, haute disponibilité requise
PostgreSQL fait de grands efforts pour maintenir la compatibilité :
- ✅ Le SQL reste compatible d'une version majeure à l'autre (dans la plupart des cas)
- ✅ Les applications continuent généralement à fonctionner sans modification
- ✅ Les drivers et clients sont rétrocompatibles
Chaque version majeure peut contenir des changements de comportement :
Exemple (hypothétique) :
- Changement dans le tri des NULL
- Changement dans la précision de certains calculs
- Dépréciation de certaines fonctionnalités
- Changements dans les paramètres par défaut
Bonne pratique : Lisez toujours les release notes, section "Migration to Version X".
Site principal : https://www.postgresql.org/docs/18/
Release Notes : https://www.postgresql.org/docs/18/release.html
Sections importantes :
- What's New : Nouveautés principales
- Migration : Changements incompatibles et procédures
- Appendix E : Historique complet des versions
Liste de diffusion : pgsql-announce@postgresql.org
Site : https://www.postgresql.org/support/security/
Importance : Abonnez-vous pour être notifié des vulnérabilités !
Site : https://www.postgresql.org/developer/roadmap/
Vous y trouverez :
- Dates de release prévues
- Dates de fin de support (EOL)
- Phases de développement actuelles
- ✅ Suivez les annonces officielles
- ✅ Lisez les release notes
- ✅ Participez à la communauté (forums, conférences)
- ✅ Suivez les blogs techniques (Percona, EDB, Crunchy Data)
- ✅ Appliquez les patches de sécurité rapidement
- ✅ Planifiez les migrations majeures avec 6-12 mois d'avance
- ✅ Testez toujours avant la production
- ✅ Documentez votre processus de migration
- ✅ Créez des alertes pour les EOL (3-6 mois avant)
- ✅ Ne laissez jamais une base en production après son EOL
- ✅ Budgétisez le temps de migration dans vos projets
- ✅ Reproduisez votre production en staging
- ✅ Testez les nouvelles versions avant de les déployer
- ✅ Exécutez vos tests automatisés contre la nouvelle version
- ✅ Documentez votre version actuelle
- ✅ Documentez vos extensions et leurs versions
- ✅ Documentez vos paramètres personnalisés
- ✅ Conservez un historique de vos migrations
- ✅ Ansible/Terraform : Automatisation du déploiement
- ✅ Flyway/Liquibase : Gestion des migrations de schéma
- ✅ Monitoring : Prometheus, Grafana pour surveiller les versions
- ✅ CI/CD : Tests automatisés contre différentes versions
Situation : Vous démarrez un nouveau projet en novembre 2025.
Question : Quelle version choisir ?
Réponse : ✅ PostgreSQL 18 (dernière version majeure)
Raisons :
- Support jusqu'en 2030
- Dernières fonctionnalités et optimisations
- Vous bénéficierez des améliorations les plus récentes
- Pas de migration immédiate à prévoir
Situation : Votre application tourne sur PostgreSQL 15, stable depuis 2 ans.
Question : Dois-je upgrader vers PostgreSQL 18 ?
Réponse :
Actions recommandées :
- PostgreSQL 15 est supporté jusqu'en 2027 → Pas d'urgence
- Appliquez les patches de PostgreSQL 15 régulièrement
- Testez PostgreSQL 18 en staging
- Planifiez une migration pour 2026 (avant que 15 n'approche de sa fin)
Situation : Votre application tourne sur PostgreSQL 13 en novembre 2025.
Question : Que faire ?
Réponse : 🚨 Urgence ! Migrez immédiatement
Raisons :
- PostgreSQL 13 atteint sa fin de vie en novembre 2025
- Plus de support de sécurité après cette date
- Exposition à des vulnérabilités non patchées
Actions :
- Planifiez une migration vers PostgreSQL 17 ou 18 dans les 3 prochains mois
- Priorisez cette migration sur les autres développements
- Testez exhaustivement avant la migration
Situation : Un patch critique est publié (ex: PostgreSQL 18.2 corrige une vulnérabilité).
Question : Quand appliquer le patch ?
Réponse : ✅ Dans les 7 jours (idéalement 48h)
Actions :
- Lisez les notes de version
- Testez rapidement en staging
- Appliquez en production avec une fenêtre de maintenance
- Ne procrastinez pas sur les patches de sécurité
Recommandation : ✅ OUI, utilisez PostgreSQL 18
Vous bénéficierez :
- Des meilleures performances (I/O asynchrone)
- Des fonctionnalités modernes (colonnes virtuelles, UUIDv7)
- D'un support jusqu'en 2030
- De l'écosystème le plus à jour
Recommandation :
Timeline suggérée :
- Q4 2025 - Q1 2026 : Évaluation et tests en développement
- Q2 2026 : Tests en staging, benchmarks
- Q3-Q4 2026 : Migration en production
Ne migrez pas immédiatement si :
- Votre version actuelle (16, 17) fonctionne bien
- Vous n'avez pas de besoin pressant des nouvelles fonctionnalités
- Votre équipe n'a pas le temps de tester
Migrez rapidement si :
- Vous êtes sur une version ancienne (13, 14)
- Vous avez besoin des performances I/O (AIO)
- Vous voulez bénéficier des améliorations de sécurité (OAuth, FIPS)
La gestion des versions est un aspect crucial de l'administration PostgreSQL. Comprendre le cycle de vie, les politiques de support et les stratégies de migration vous permet de maintenir vos systèmes de manière sécurisée et efficace.
- ✅ Numérotation : Format MAJEUR.PATCH depuis PostgreSQL 10
- ✅ Support : 5 ans pour chaque version majeure
- ✅ Patches : À appliquer systématiquement et rapidement
- ✅ Versions majeures : Une par an, nécessitent planification et tests
- ✅ PostgreSQL 18 : Version actuelle avec des améliorations majeures (I/O, sécurité, upgrade)
- ✅ EOL : Ne jamais utiliser une version en fin de vie en production
- Je connais ma version actuelle de PostgreSQL
- Je sais quand ma version atteindra sa fin de vie
- Je suis abonné aux annonces de sécurité
- J'applique les patches dans les 7 jours
- J'ai un environnement de test pour les nouvelles versions
- Je planifie mes migrations majeures 6-12 mois à l'avance
- Je documente mes processus de migration
- Je surveille les release notes des nouvelles versions
Prochaine section : 2.3. Cas d'utilisation et positionnement dans l'industrie