PostgreSQL ( POHST-gres-kew-EL), également connu sous le nom de Postgres, est un système de gestion de base de données relationnelle (SGBDR) gratuit et open source qui met l'accent sur l'extensibilité et la conformité SQL. La base de données propose des transactions avec des propriétés d'atomicité, de cohérence, d'isolation et de durabilité (ACID), ainsi que des vues automatiquement actualisables, des vues matérialisées, des déclencheurs, des clés étrangères et des procédures stockées. Elle est prise en charge sur tous les principaux systèmes d'exploitation, y compris Windows, Linux, macOS, FreeBSD et OpenBSD, et gère une gamme de charges de travail allant des machines uniques aux entrepôts de données, lacs de données ou services web avec de nombreux utilisateurs simultanés.
Le PostgreSQL Global Development Group se concentre uniquement sur le développement d'un moteur de base de données et de composants étroitement liés. Ce noyau constitue techniquement ce qu'est PostgreSQL lui-même, mais une vaste communauté de développeurs et un écosystème fournissent d'autres ensembles de fonctionnalités importantes qui seraient traditionnellement proposés par un fournisseur de logiciels propriétaires. Cela inclut des fonctionnalités spécialisées de moteur de base de données, telles que celles nécessaires pour prendre en charge une base de données géospatiale ou temporelle, ou des fonctionnalités qui émulent d'autres produits de base de données. Sont également disponibles auprès de tiers une grande variété de fonctionnalités d'interface utilisateur et machine, telles que des interfaces graphiques ou des ensembles d'outils d'équilibrage de charge et de haute disponibilité. Le vaste réseau de soutien tiers de PostgreSQL, composé de personnes, d'entreprises, de produits et de projets, même s'il ne fait pas partie du PostgreSQL Development Group, est essentiel à l'adoption et à l'utilisation du moteur de base de données et constitue l'écosystème PostgreSQL au sens large.
Histoire
Ingres et POSTGRES universitaire (1982-1994)
PostgreSQL a évolué à partir du projet Ingres à l'Université de Californie à Berkeley. En 1982, le chef de l'équipe Ingres, Michael Stonebraker, a quitté Berkeley pour créer une version propriétaire d'Ingres. Il est revenu à Berkeley en 1985 et a commencé un projet post-Ingres pour résoudre les problèmes des systèmes de base de données contemporains qui étaient devenus de plus en plus évidents au début des années 1980. Il a remporté le prix Turing en 2014 pour ces projets et d'autres, ainsi que pour les techniques pionnières qu'ils ont introduites.
Le nouveau projet, POSTGRES, visait à ajouter le minimum de fonctionnalités nécessaires pour prendre entièrement en charge les types de données. Ces fonctionnalités incluaient la capacité de définir des types et de décrire complètement les relations, une pratique largement utilisée mais maintenue entièrement par l'utilisateur. Dans POSTGRES, la base de données comprenait les relations et pouvait récupérer des informations dans des tables liées de manière naturelle en utilisant des règles. POSTGRES utilisait de nombreuses idées d'Ingres mais pas son code.
À partir de 1986, des articles publiés ont décrit les bases du système, et une version prototype a été présentée à la conférence ACM SIGMOD de 1988. L'équipe a publié la version 1 à un petit nombre d'utilisateurs en juin 1989, suivie de la version 2 avec un système de règles réécrit en juin 1990. La version 3, publiée en 1991, a de nouveau réécrit le système de règles et ajouté la prise en charge de plusieurs gestionnaires de stockage et un moteur de requêtes amélioré. En 1993, le nombre d'utilisateurs a commencé à submerger le projet avec des demandes de soutien et de fonctionnalités. Après avoir publié la version 4.2 le 30 juin 1994, principalement un nettoyage, le projet s'est terminé. Berkeley a publié POSTGRES sous une variante de la licence MIT, ce qui a permis à d'autres développeurs d'utiliser le code pour tout usage. À l'époque, POSTGRES utilisait un interpréteur de langage de requêtes POSTQUEL influencé par Ingres, qui pouvait être utilisé de manière interactive avec une application console nommée monitor.
Postgres95 (1994-1996)
En 1994, les étudiants diplômés de Berkeley Andrew Yu et Jolly Chen ont remplacé l'interpréteur de langage de requêtes POSTQUEL par un interpréteur pour le langage de requêtes SQL, créant ainsi Postgres95. La console monitor a également été remplacée par psql. Yu et Chen ont annoncé la première version (0.01) aux testeurs bêta le 5 mai 1995. La version 1.0 de Postgres95 a été annoncée le 5 septembre 1995, avec une licence plus libérale permettant au logiciel d'être librement modifiable.
Le 8 juillet 1996, Marc Fournier chez Hub.org Networking Services a fourni le premier serveur de développement non universitaire pour l'effort de développement open source. Avec la participation de Bruce Momjian et Vadim B. Mikheev, le travail a commencé pour stabiliser le code hérité de Berkeley.
PostgreSQL (1996-présent)
En 1996, le projet a été renommé PostgreSQL pour refléter sa prise en charge de SQL. La présence en ligne sur le site Web PostgreSQL.org a commencé le 22 octobre 1996. La première version de PostgreSQL a formé la version 6.0 le 29 janvier 1997. Depuis lors, des développeurs et des bénévoles du monde entier maintiennent le logiciel sous le nom de The PostgreSQL Global Development Group.
Le projet continue de publier des versions sous sa licence de logiciel libre et open source PostgreSQL License. Le code provient de contributions de fournisseurs propriétaires, de sociétés de soutien et de programmeurs open source.
PostgreSQL 18, publié le 25 septembre 2025, a introduit un nouveau sous-système d'entrée-sortie asynchrone (AIO), permettant aux utilisateurs de base de données d'effectuer des tâches d'entrée-sortie concurrentes comme la lecture anticipée et l'analyse séquentielle, et démontrant jusqu'à une amélioration de performance de 3x pour les lectures de stockage dans certaines charges de travail. La version a également ajouté la prise en charge de la persistance des statistiques du planificateur lors des mises à niveau de version majeure, réduisant la dégradation des performances qui se produisait auparavant pendant la reconstruction des statistiques après une mise à niveau. À la mi-2026, PostgreSQL 19 était en test bêta, avec une version générale anticipée plus tard dans l'année.
Contrôle de concurrence multiversion (MVCC)
PostgreSQL gère la concurrence via le contrôle de concurrence multiversion (MVCC), qui donne à chaque transaction un « instantané » de la base de données, permettant d'apporter des modifications sans affecter les autres transactions. Cela élimine en grande partie le besoin de verrous de lecture et garantit que la base de données maintient les principes ACID. PostgreSQL offre quatre niveaux d'isolation des transactions : Read Uncommitted, Read Committed, Repeatable Read et Serializable. Étant donné que PostgreSQL est immunisé contre les lectures sales, demander un niveau d'isolation de transaction Read Uncommitted fournit Read Committed à la place. PostgreSQL prend en charge la sérialisabilité complète via la méthode d'isolation d'instantané sérialisable (SSI). L'implémentation MVCC de PostgreSQL est sujette à des problèmes de performance qui nécessitent un réglage lorsqu'elle est soumise à une charge d'écriture lourde qui met à jour des lignes existantes.
Stockage et réplication
Réplication
PostgreSQL inclut une réplication binaire intégrée basée sur l'envoi des modifications (journaux d'écriture anticipée, ou WAL) aux nœuds répliqués de manière asynchrone, avec la capacité d'exécuter des requêtes en lecture seule contre ces nœuds répliqués. Cela permet de répartir efficacement le trafic de lecture entre plusieurs nœuds. Les logiciels de réplication antérieurs qui permettaient une mise à l'échelle de lecture similaire reposaient généralement sur des solutions basées sur des déclencheurs, qui étaient moins robustes. La réplication synchrone est également disponible, garantissant qu'une transaction n'est validée qu'après avoir été écrite sur au moins un serveur de secours, offrant des garanties de durabilité plus fortes au prix d'une latence plus élevée.
Stockage et indexation
PostgreSQL prend en charge une variété de techniques de stockage et d'indexation. Le stockage en tas par défaut organise les lignes en pages, et plusieurs types d'index sont disponibles, y compris B-tree, hash, GiST, SP-GiST, GIN et BRIN. Ces index prennent en charge une interrogation efficace pour différents types de données et modèles d'accès. Le partitionnement de tables, introduit dans les versions antérieures et amélioré au fil du temps, permet de diviser les grandes tables en morceaux plus petits et plus gérables, améliorant les performances des requêtes et les opérations de maintenance. Le système prend également en charge les tablespaces, permettant aux administrateurs de contrôler le placement physique du stockage sur disque.
Extensibilité et types de données
Une caractéristique déterminante de PostgreSQL est son extensibilité. Les utilisateurs peuvent définir des types de données personnalisés, des opérateurs, des méthodes d'index et des fonctions. Cette extensibilité a conduit au développement d'extensions spécialisées telles que PostGIS pour les données géospatiales, qui ajoute la prise en charge des objets géographiques et des requêtes spatiales. D'autres extensions fournissent des capacités de recherche en texte intégral, des fonctionnalités de magasin de clés-valeurs et une intégration avec des systèmes externes. Le mécanisme d'extension permet aux développeurs tiers d'ajouter des fonctionnalités sans modifier le moteur de base de données principal, contribuant ainsi au riche écosystème PostgreSQL.
PostgreSQL prend nativement en charge une large gamme de types de données, y compris les données numériques, les chaînes, les dates/heures, les booléens et les données binaires. Il inclut également la prise en charge des tableaux, JSON et JSONB (JSON binaire), XML et des types d'adresses réseau. Le type JSONB, en particulier, permet un stockage et une interrogation efficaces de données semi-structurées, faisant de PostgreSQL une option viable pour les charges de travail orientées documents aux côtés des données relationnelles traditionnelles.
Conformité SQL et fonctionnalités
PostgreSQL est connu pour son haut degré de conformité SQL. Il implémente une grande partie de la norme SQL, y compris les requêtes complexes, les sous-requêtes, les fonctions de fenêtre, les expressions de table communes (CTE) et les requêtes récursives. La base de données prend en charge les clés étrangères, les contraintes de vérification, les contraintes uniques et les clés primaires pour garantir l'intégrité des données. Les déclencheurs, qui peuvent être écrits dans plusieurs langages procéduraux, permettent l'exécution automatique de fonctions en réponse à des événements de base de données.
Les procédures stockées et les fonctions peuvent être écrites dans plusieurs langages, y compris PL/pgSQL (le langage procédural intégré), PL/Python, PL/Perl et PL/Tcl. Cette flexibilité permet aux développeurs d'implémenter la logique métier directement dans la base de données. PostgreSQL prend également en charge les fonctions définies par l'utilisateur écrites en C, permettant des opérations personnalisées à hautes performances. Le système inclut un planificateur et un optimiseur de requêtes sophistiqués qui peuvent gérer des ordres de jointure complexes et utiliser des statistiques pour choisir des plans d'exécution efficaces.
Communauté et écosystème
Le PostgreSQL Global Development Group coordonne le développement du moteur de base de données principal, mais l'écosystème plus large est vaste. De nombreuses entreprises offrent un soutien commercial, des services de conseil et de formation pour PostgreSQL. Les fournisseurs de cloud, y compris Amazon Web Services, Microsoft Azure et Google Cloud, proposent des services PostgreSQL gérés, facilitant le déploiement et la mise à l'échelle des bases de données dans le cloud. Ces services gèrent des tâches opérationnelles comme les sauvegardes, les correctifs et la haute disponibilité, tout en fournissant une intégration avec d'autres outils natifs du cloud.
Des outils tiers améliorent la convivialité et la fonctionnalité. Les interfaces graphiques comme pgAdmin fournissent des outils de gestion visuelle et de requêtes. Les solutions de haute disponibilité et d'équilibrage de charge, telles que Patroni et repmgr, automatisent le basculement et la gestion des clusters. Les outils de sauvegarde comme pgBackRest et Barman offrent des fonctionnalités avancées de sauvegarde et de récupération. L'écosystème inclut également des poolers de connexions comme PgBouncer, qui améliorent les performances pour les applications avec de nombreuses connexions simultanées.
Cas d'utilisation et adoption
PostgreSQL est utilisé dans une large gamme d'industries et d'applications. Il sert de base de données principale pour les applications web, les backends mobiles et les systèmes d'entreprise. Sa prise en charge de JSONB le rend attrayant pour les applications nécessitant un stockage hybride relationnel et document. Les capacités géospatiales fournies par PostGIS sont largement utilisées dans les services basés sur la localisation et les systèmes d'information géographique (SIG).
Dans le domaine de l'Artificial intelligence et du Machine learning, PostgreSQL est de plus en plus utilisé comme magasin de données pour les pipelines d'entraînement et d'inférence. Des extensions comme pgvector permettent un stockage et une interrogation efficaces des embeddings vectoriels, essentiels pour les applications de Large language model et les systèmes de Generative AI. Cela permet aux développeurs de construire des systèmes de recherche sémantique et de recommandation directement dans la base de données, réduisant le besoin de bases de données vectorielles séparées. La robustesse, l'extensibilité et la licence open source de la base de données en ont fait un choix populaire pour les organisations allant des startups aux grandes entreprises.
Licence et gouvernance
La licence PostgreSQL est une licence libre et open source permissive, similaire à la licence MIT. Elle permet aux utilisateurs d'utiliser, de modifier et de distribuer le logiciel à toute fin, y compris les applications commerciales, avec des restrictions minimales. La licence exige que les avis de droit d'auteur soient conservés et que le logiciel soit fourni sans garantie.
Le projet est gouverné par une communauté de développeurs et d'utilisateurs, avec une équipe centrale supervisant les décisions majeures. Le développement est piloté par des listes de diffusion et un cycle de publication annuel, avec des versions majeures généralement publiées à l'automne. Le modèle de gouvernance met l'accent sur la transparence et le consensus, avec des contributions d'individus et d'entreprises du monde entier. Cette gouvernance ouverte a favorisé un processus de développement stable et innovant, garantissant que PostgreSQL reste une technologie de base de données de premier plan.