BEGIN ;
INSERT INTO GARDIEN VALUES (null, ‘Dupont’, ‘Grenoble’, ‘25/10/1970’);
SELECT * FROM GARDIEN ;
COMMIT ;
SELECT * FROM GARDIEN ;
Commenter chaque action! Que fait le serveur Postgres?
- Recommencer une autre transaction, et dans cette transaction, essayez de faire les
manipulations ci-dessous :
BEGIN ;
INSERT INTO GARDIEN VALUES (85, ‘Dupont’, ‘Grenoble’, ‘25/10/1970’);
SELECT * FROM GARDIEN where nomg=’Dupont’;
COMMIT ;
SELECT * FROM GARDIEN where nomg=’Dupont’;
Commenter chaque action! Que fait le serveur Postgres?
Exercice 2 : Insertion et modification de lignes par transaction
L’éléphant Kalanag donne naissance à un éléphanteau Toomai. Les animaux de la cage de
Kalanag doivent donc être transférés afin de laisser la cage de Kalanag libre pour la maman et
le bébé…
En une seule transaction :
1) Modifier la cage de tous les animaux qui étaient jusqu’alors dans la cage de Kalanag
(excepté Kalanag).
2) Insérer l’animal « Toomai » dans la table Animal et le mettre dans la cage de Kalanag.
Quel est l’avantage de mettre ces instructions dans une transaction ?
Remarque importante à lire avant de commencer l’exercice 3 :
Contrairement aux systèmes de gestion de base de données traditionnels, Postgres n’utilise
pas de verrous pour gérer les transactions, mais un système de gestion de version. Cela
signifie que chaque transaction qui utilise la base de données ne voit qu’une « photo » des
données (une version). Par défaut dans Postgres, une requête d’une transaction ne voit que les
changements validés avant l'exécution de la requête ainsi que les changements effectués dans
la transaction elle-même. On dit que le mode d’exécution est READ COMMITED.
L’avantage est d’avoir moins de conflit qu’avec la gestion des verrous. Cela permet aux
transactions de ne pas voir de données incohérentes, mais cela ne garantit pas la sérialisabilité.
Pour garantir la sérialisabilité, il est possible de poser explicitement des verrous ou de passer
dans un mode « sérializable ». En mode SERIALIZABLE, les requêtes ne verront que les
changements validés avant que la transaction ne débute.
Exercice 3 : Transactions concurrentes
Pour bien mettre en évidence le fonctionnement des transactions, il est nécessaire d’avoir des
transactions concurrentes. Vous allez donc simuler l’utilisation simultanée de la base de
données de « Zoo » par 2 utilisateurs en vous connectant à votre base dans 2 fenêtres
différentes. Pour éviter des problèmes de droits, c’est le même utilisateur (usera101) qui se
connecte 2 fois.
Copier le fichier trans.sql disponible dans /users/info/pub/1a/zoo
Questions 1 et 2 : Exécuter les requêtes dans l’ordre dans lequel elles sont écrites dans le
fichier trans.sql et dans la fenêtre correspondant à chaque utilisateur. Notez vos conclusions.