PostgreSQL
PostgreSQL est issu du projet postgres, développé à partir de 1986 à l'Université de Berkeley, le projet postgres étant lui-même une réécriture complète de la base de données Ingres... d'où le nom: postgres, une contraction de post-ingres.
PostgreSQL est aujourd'hui un moteur de base de données relationnel distribué sous une licence libre. Le moteur est utilisable grâce à une implémentation du langage SQL très proche de la norme du langage (il y a toutefois quelques extensions). Le degré de compatibilité de chaque commande par rapport à la norme est d'ailleurs détaillé dans la documentation, très complète et extrêmement bien faite.
PostgreSQL est un SGBDR (Système de Gestion de Base de Données Relationnel) extrêmement performant, puissant et flexible, aussi bien pour le développeur que pour l'administrateur. On peut le comparer au SGBD Oracle dont il est d'ailleurs très proche (la plupart des fonctions ont la même signature par exemple). Ainsi, il est aisé de porter des applications d'Oracle vers PostgreSQL.
- Contraintes d'intégrité: des contraintes d'intégrité peuvent être énoncées. Une contrainte d'intégrité est une clause qui conditionne la mise à jour des relations du modèle. Une mise à jour peut être une insertion, une modification ou une suppression. Une relation peut porter sur une seule table ou plusieurs tables (et oui, une table est une relation en soi !). On peut enrichir le modèle relationnel par des clauses sur les attributs d'une relation portant sur une seule table (exemple : NOT NULL -attribut obligatoire-, DEFAULT -valeur par défaut si non spécifié-, UNIQUE -valeur unique pour toute la table-). Sur une relation portant sur plusieurs tables par l'intermédiaire des clés étrangères, il s'agit de s'assurer que la référence d'une clé étrangère est toujours valide. C'est-à-dire qu'elle "pointe" bien sur un enregistrement existant. Il ne s'agit donc pas de le détruire s'il est utilisé par une relation. Par suite, lors de suppression de données, on a la possibilité de déclencher soit une exception si la contrainte venait à être violée, soit des suppressions "en cascade".
- Types de données : le langage SQL de postgresql fournit de très nombreux types de données, notamment des types "géométriques", qui font de postgresql un outil de choix pour les SIG (Système d'information Géographique grâce à PostGIS http://postgis.refractions.net/). Mais surtout, il est possible de définir ses propres types de données (notion de "domaine", qui s'apparente à la notion d'objet que l'on trouve dans des langages comme java ou C++).
- Déclencheurs ("Triggers") : des procédures embarquées peuvent être écrites. L'originalité de postgresql réside dans le fait que ces procédures peuvent être écrites dans de nombreux langages. Le langage de base est plpsql, mais il est possible d'écrire ces fonctions en perl, ruby ou python par exemple.
- BLOBS ( Binary Large Objects) : il est possible d'intégrer à PostgresQL n'importe quel fichier (quelque soit sa taille) sous forme de blob.
- Schémas : une base de données postgres est composée de un ou plusieurs "schémas". Chaque schéma contient un ensemble de tables. Il est possible d'avoir plusieurs tables de même nom, à condition qu'elles soient dans différents schémas. Une variable permet de définir un "chemin", afin de spécifier dans quels schémas les tables seront recherchées, sans qu'on ait à spécifier leur nom complet. Lorsqu'une base de données est créée, toutes ses tables appartiennent au schéma "public", de sorte qu'on puisse ignorer cette fonctionnalité. Les schémas permettent entre autres de grouper les tables en fonction de leurs droits d'accès.
- Authentification : PostgresQL supporte l'authentification par rôles ( RBAC ) : un rôle peut contenir d'autres rôles, un rôle peut être utilisé pour se connecter à la base - ou pas. En fait la notion de rôle remplace la notion d'utilisateurs et de groupes. Les autorisations d'accès aux bases de données sont décrites dans un ficher texte édité par l'administrateur de la machine: cela peut sembler plus compliqué que d'utiliser des commandes de la base de données, mais la sécurité est meilleure.
- Héritage : plusieurs tables peuvent "hériter" l'une de l'autre, ce qui offre de nombreuses possibilités de programmation selon un principe proche de la programmation orientée objets. Par ailleurs, on peut utiliser cette fonctionnalité pour distribuer une grosse table en plusieurs partitions afin d'améliorer les performances des requêtes. Ces partitions peuvent si nécessaire être distribuées sur plusieurs disques différents. Tout cela peut être réalisé de manière entièrement transparente pour l'application.
- Transaction et journaux de transactions : le paradigme 'ACID' (cf. http://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9s_...) est respecté si on utilise le mécanisme de transactions. Les journaux de transactions peuvent être activés, cela permet de réaliser des sauvegardes incrémentales de la base de données. Ces possibilités permettent d'utiliser postgresQL pour de gros projets de bases de données complexes, gérant de gros volumes de données fréquemment mises à jour.
- Fonctions de hachage : un des points forts de postgres est la possibilité de définir ses propres fonctions de hachage afin d'optimiser les performances des index et donc celles de l'accès des données. Chaque index pourra avoir sa propre fonction de hachage exploitant au mieux les propriétés ensemblistes de la clé ou des attributs concernés. L'objectif est de rechercher au mieux une équidistribution des enregistrements dans la table de "hashage" pour garantir l'optimalité de l'accès des données. Par ailleurs, un index peut comprendre plusieurs niveaux de hashage, ce qui est très intéressant pour les grands ensembles de clés.
L'implémentation du langage SQL garantit une bonne interopérabilité, à condition bien sûr de ne pas utiliser les extensions propres à postgresql. Des utilitaires permettent de recopier ("dumper") la base de données dans un fichier d'archivage afin de la sauvegarder et/ou de la réinstaller sur une autre machine.
PostgreSQL est utilisé à l'INIST par DSpace en production depuis 2005, dans des versions antérieures (7.x).
PostgreSQL 8.3 est utilisé en production depuis octobre 2009 dans I-Revues.
Le LIPM, utilise postgreSQL pour des applications de bases de données développées au laboratoire (bases de données de graines ou de souches bactériennes), ainsi que pour mettre en place des applications bio-informatiques utilisant le modèle Chado.
- PostgreSQL est très bien intégrée au système UNIX, de sorte qu'administrer une base de données postgresQL nécessite une bonne connaissance de l'administration de la machine elle-même.
- Afin d'avoir de bonnes performances, en particulier lors de requêtes complexes mettant en action de nombreuses jointures, il est nécessaire de modifier certains paramètres du serveur, voire du noyau linux.
- Attention aux changements de version, la compatibilité ascendante n'est pas toujours parfaitement respectée. Il peut être nécessaire d'avoir plusieurs versions de postgreSQL sur une même machine (cela ne pose pas en soi de problème particulier).
Commentaires
PostgreSQL 9.0 est sorti!
Après une longue attente!