Le système de gestion de bases de données objet-relationnel connu sous le nom de Postgres (abréviation de « Postgres95 ») est dérivé du logiciel écrit à Berkeley. PostgreSQL, après plus de dix années de développement, est le plus mature des systèmes libres de ce genre disponibles car il offre le contrôle des versions, honore quasiment toutes les constructions SQL (y compris les sous-requêtes, les transactions, et les fonctions et types définis par l'utilisateur), et est utilisable via de nombreux langages (y compris C, C++, Java, Perl, Tcl, et Python).
L'implémentation commença en 1986. Les concepts fondamentaux du système furent présentés dans The Design of Postgres, (M. Stonebraker et L. Rowe) et les définitions du modèle de données correspondant apparurent dans The Postgres Data Model (L. Rowe et M. Stonebraker). Le document intitulé The Design of the Postgres Rules System (M. Stonebraker, E. Hanson, et C. H. Hong) détaillait les règles du système. L'architecture du gestionnaire de stockage était exposée dans The Postgres Storage System (M. Stonebraker).
Postgres a connu, depuis, plusieurs révisions majeures. La première version de démonstration devint opérationnelle en 1987, et fut présentée à la conférence ACM-SIGMOD de 1988. La version 1, décrite dans The Implementation of Postgres (M. Stonebraker, L. A. Rowe, et M. Hirohama) et destinée à quelques utilisateurs extérieurs, fut réalisée en juin 1989. Le système de règles, après publication d'un commentaire intitulé A Commentary on the Postgres Rules System (M. Stonebraker, M. Hearst, et S. Potamianos), fut remodelé et décrit à son tour par On Rules, Procedures, Caching and Views in Database Systems (M. Stonebraker et al.). La version 2 intégrait un nouveau système de règles et apparut en juin 1990. La version 3 naquit en 1991 et offrait des gestionnaires de stockage multiple, l'amélioration de l'exécuteur de requêtes, et un nouveau système de réécriture de règles. Les révisions suivantes (jusqu'à Postgres95) améliorèrent surtout la portabilité et la fiabilité.
Postgres a été utilisé pour implémenter différentes applications de recherche et de production. Ceci comprend : un système d'analyse de données financières, un système de gestion de performances d'un réacteur d'avion, une base de suivi d'astéroïdes, une base d'information médicale, et plusieurs systèmes d'information géographiques. Postgres a également été utilisé comme outil d'apprentissage dans plusieurs universités. La société « Illustra Information Technologies » (dont le nom devint « Informix ») reprit le code et le commercialisa. Postgres devint, fin 1992, le premier gestionnaire de bases de données du projet d'informatique scientifique Sequoia 2000. De plus, la taille de la communauté des utilisateurs extérieurs a presque doublé en 1993. Le projet universitaire prit officiellement fin lors de la publication de la version 4.2.
En 1994, Andrew Yu et Jolly Chen ajoutèrent à Postgres un interpréteur de langage SQL. Le résultat, appelé « Postgres95 », fut de façon substantielle amélioré pour le web et ce descendant du code original de Berkeley trouva son propre chemin dans le monde du logiciel libre.
Postgres95 est un dérivé de la dernière version officielle de Postgres (4.2). Le code est maintenant complètement ANSI C et la taille allégée de 25%. Il intègre de nombreuses modifications augmentant ses performances. Postgres95 v1.0x fonctionne environ 30 à 50% plus vite que la version 4.2 (selon le Wisconsin Benchmark). voici ses principales différences d'avec Postgres 4.2 (hormis quelques corrections de bogues) :
le langage de requêtes PostQuel a été remplacé par le SQL (implémenté dans le serveur). Il ne tolère cependant pas les sous requêtes (lesquelles peuvent être assurées par des fonctions SQL définies par l'utilisateur). Les aggrégats ont été ré-implémentés, et "GROUP BY" est honoré. L'interface libpq est toujours disponible pour les programmes en C.
Un nouveau programme (psql) peut véhiculer les requêtes SQL vers le serveur et acheminer les résultats vers l'utilisateur. Il est utilisable de façon interactive et emploie GNU readline (bibliothèque de gestion des saisies).
Une nouvelle bibliothèque d'accès appelée libpgtcl a été ajoutée. Elle sert les programmes clients rédigés en langage tcl. Un échantillon de shell, pgtclsh, procure de nouvelles commandes tcl pour interfacer les programmes tcl avec le serveur (backend) de Postgres95.
L'interface d'accès aux objets de gros gabarit (Large Objects, ou LOB) fut révisée, et "Inversion" (Inversion large objects) resta leur seul mécanisme de stockage. Le système de fichiers "Inversion" fut supprimé.
Le système de règles niveau-instance a été supprimé. Les règles sont toujours disponibles comme règles ré-écrites.
Un court tutoriel sur les fonctions régulières SQL est distribué avec le code source.
GNU make (au lieu de BSD make) est utilisé pour la compilation. Ainsi, Postgres95 peut être compilé avec gcc non patché.
En 1996, il devient clair que le nom "Postgres95" n'est plus adapté. Un nouveau nom, PostgreSQL, fut choisi pour refléter la relation entre le Postgres original et les versions plus récentes avec les possibilités SQL. Au même moment, le numérotage des versions commença à 6.0.
L'accent, pendant la phase de développement de Postgres95, fut porté sur l'identification et la compréhension des problèmes du code interne. Avec PostgreSQL il porta sur l'augmentation des fonctionnalités et des possibilités, bien que le travail continuait dans les autres domaines.
Les points principaux :
Le verrouillage assuré au niveau de la table a été remplacé par un contrôle concurrentiel qui permet de lire les tables alors que des opérations d'écriture sont en cours, et de sauvegarder à chaud (sans interruption de service) grâce à pg_dump.
D'importantes fonctionnalités internes, incluant les sous-sélections, valeurs par défaut (defaults), contraintes, et déclencheurs (triggers), ont été implémentées.
Des fonctionnalités additionnelles du langage SQL92 ont été ajoutées. Il s'agit surtout des clés primaires, des identifiants (quoted identifiers), du surtypage implicite vers le type chaîne littérale (literal string type coersion), du surtypage (type casting), et de la gestion des saisies exprimées en binaire et hexadécimal.
Les types disponibles ont été améliorés, la portée des types date et heure furent étendus, et un type géométrique ajouté.
La vitesse du code interne a été améliorée d'environ 20%, et le temps de démarrage du serveur réduit de 80%.