PostgreSQL

Fiche logiciel validé
  • Création ou MAJ importante : 17/11/10
  • Correction mineure : 31/01/12
Mots-clés

PostgreSQL : Système de Gestion de Base de Données Relationnel et Objet (SGBDRO)

Description
Fonctionnalités générales

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.

Autres fonctionnalités
  • 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.
Interopérabilité

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.

Contexte d'utilisation dans mon laboratoire/service

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.

Limitations, difficultés, fonctionnalités importantes non couvertes
  • 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).
Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

PostgreSQL est intégré dans les principales distributions Linux. Il est parfois nécessaire d'utiliser une version qui n'est pas encore - ou plus - distribuée par votre éditeur préféré. Dans ce cas, il est toujours possible de récupérer les sources (les anciennes versions sont encore disponibles, les plus récentes sont toujours maintenues) et de les recompiler. La bonne qualité du code rend cette opération assez simple.

Plates-formes

PostgreSQL est distribué pour les systèmes Linux, FreeBSD, Solaris, Windows et MacOSX

Logiciels connexes
Autres logiciels aux fonctionnalités équivalentes

Oracle 9, MySQL, Microsoft SQL Server, Sybase, ....

Environnement de développement
Type de structure associée au développement

Communauté de développeurs

Eléments de pérennité

La communauté est extrêmement vivante, de nouvelles versions sortent régulièrement (la version 9 vient de sortir)

Références d'utilisateurs institutionnels

Laboratoires et services CNRS, INRA, ...

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums

Forum officiel de la communauté francophone : http://forums.postgresql.fr/
Un grand nombre de mailing-lists sont également disponibles : http://www.postgresql.org/community/lists/

Documentation utilisateur
Divers (astuces, actualités, sécurité)
  • Lorsqu'on met à jour ou supprime des enregistrements d'une table, l'espace-disque n'est pas systématiquement libéré : c'est la tâche du "vacuum", qui était implémenté avant la version 8 sous la forme d'un programme séparé: il fallait le lancer régulièrement via un cron. Depuis la version 8 le vacuum se lance automatiquement lorsque la machine n'est pas trop chargée.
  • Pour une base de données utilisée uniquement en lecture (c'est souvent le cas pour certaines applications scientifiques), il est utile après le chargement initial d'utiliser la commande vacuum analyze : cette commande met à jour les tables de statistiques sur la base, qui seront utilisées par l'optimiseur pour construire des requêtes efficaces. Les statistiques ne sont jamais mises à jour si la base n'est pas modifiée.

Commentaires

PostgreSQL 9.0 est sorti!

Après une longue attente!