Présentation de PostgreSQL

PostgreSQL est un système de gestion de base de données, développé à l'origine par l'université de Berkeley. Il s'appuie sur les modèles relationnels mais apporte des extensions objet comme :

Cela permet de qualifier PostgreSQL de système de gestion de base de données "relationnel-objet" (ORDBMS), à ne pas confondre avec les bases de données orientées objets qui ne supportent pas SQL, mais OQL (Object Query Language).

PostgreSQL est diffusé avec ses sources (licence libre).

Mode de fonctionnement de PostgreSQL

Les trois composantes majeures sont :

  • un processus de supervision (daemon) qui prend en charge les connexions des clients : postmaster,

  • les applications clientes comme psql, qui permettent de passer des requêtes SQL,

  • le ou les serveurs de bases de données (agents). Processus d'ouverture de session : (voir le schéma d'ouverture de session.)

Description du processus d'ouverture de session

  1. Le client passe une requête au daemon postmaster via un socket. Par défaut sur le port 5432. La requête contient le nom de l'utilisateur, le nom de la base de données. Le daemon, peut à ce moment utiliser une procédure d'authentification de l'utilisateur. Pour cela il utilise le catalogue de la base de données, dans lequel sont définis les utilisateurs.

  2. Le daemon crée un alors un agent pour le client. Le processus serveur répond favorablement ou non en cas d'échec du démarrage du processus. (exemple : nom de base de données invalide).

  3. Le processus client se connecte sur le processus agent. Quand le client veut clore la session, il transmet un paquet approprié au processus agent et ferme la connexion sans attendre la réponse.

  4. Plusieurs processus agents peuvent être initialisés pour un même client.

Le dictionnaire :

Comme pour la plupart des systèmes de gestion de données, toutes les informations système sont stockées dans des tables qui forment le dictionnaire (catalogue ou repository en Anglais). Utiliser le cataloque est essentiel pour les administrateurs et les développeurs. Vous pouvez voir la structure et le contenu de ces tables système.

PostgreSQL fournit :

un langage d'administration (création de base, d'utilisateurs)

un langage d'interrogation de données basé conforme à SQL

des extensions C, C++, perl, php, python...

Les comptes utilisateurs :

Le compte administrateur de la base est par défaut " postgres "

il faut créer les comptes utilisateurs

Voir le TP sur HTTP pour obtenir le compte système qui est utilisé par Apache pour les requêtes http. Sur la freeduc-sup c'est "www-data". Dans la suite du document on utilisera $COMPTE_HTTP pour parler de ce compte système.

Langage de commande pour PostgreSQL

Voici quelques commandes d'administration de base :

Création d'une base de données : createdb

createdb [ dbname ]

createdb [ -h host ] [ -p port ] [ -D datadir ] [ -u ] [ dbname ]

Exemple : createdb -h uranus -p 5432 -D PGDATA -u demo

ou encore createdb demo

Suppression d'une base de données

dropdb [ dbname ]

Exemple dropdb demo

Créer un utilisateur :

createuser [ username ]

createuser [ -h host ] [ -p port ] [ -i userid ] [ -d | -D ] [ -u | -U ] [ username ]

-d | -D permet ou interdit la création de base à l'utilisateur

-u | -U permet ou interdit la création d'autres comptes à l'utilisateur.

Crée un compte dans pg_user ou pg_shadow. (tables système)

Si la base est accessible par Internet (exemple avec PHP), l'accès est réalisé par le compte " $COMPTE_HTTP ".

Utiliser la commande "select * from pg_user;" pour avoir la liste des utilisateurs.

Supprimer un utilisateur

drop user [ username ]

Accéder à une base:

psql [ dbname ]

psql -A [ -c query ] [ -d dbname ] -e [ -f filename ] [ -F separator ] [ -h hostname ] [ -o filename ] [ -p port ] -qsSt ]

[ -T table_options ] -ux [ dbname ]

mlx@mr:~$ psql template1
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=#