Se connecter deux fois à une même base de données dans deux terminaux (term1 et term2) :
psql mydb
psql mydb
Créer une table test
: CREATE TABLE test (a integer);
term1 Insérer une valeur : INSERT ...
(COMMIT
implicite)
term2 Vérifier que la valeur est visible : SELECT ...
-- term1
INSERT INTO test(a) VALUES (1);
-- term2
SELECT * FROM test;
a
---
1
term1 Commencer une transaction : BEGIN TRANSACTION;
term1 Insérer la valeur 2 dans la table : INSERT INTO...
term1 Vérifier que la valeur est bien dans la table : SELECT * FROM ...
term2 Vérifier que la valeur n'est pas visible : SELECT * FROM ...
term1 Valider la transaction : COMMIT;
term2 Vérifier que la valeur est visible : SELECT * FROM ...
-- term1
BEGIN TRANSACTION;
INSERT INTO test(a) VALUES (2);
SELECT * FROM test;
a
---
1
2
-- term2
SELECT * FROM test;
a
---
1
-- term1
COMMIT;
-- term2
SELECT * FROM test;
a
---
1
2
term1 Commencer une transaction : BEGIN TRANSACTION;
term1 Exécuter une mise à jour (multiplier toutes les valeurs par 2) : UPDATE...
term2 Exécuter une mise à jour concurrente (multiplier les valeurs par 3) : UPDATE...
term2 Observer la mise en attente
term1 Valider la transaction : COMMIT;
term2 Vérifier le déblocage et que les deux mises à jour ont bien été effectuées (a multiplié par 6) : SELECT...
term1 Vérifier que les deux mises à jour ont bien été effectuées (a multiplié par 6) : SELECT...
-- term1
BEGIN TRANSACTION;
UPDATE test SET a=a*2;
-- term2
UPDATE test SET a=a*3;
-- attente...
-- term1
COMMIT;
-- term2
SELECT * FROM test;
a
----
6
12
-- term1
SELECT * FROM test;
a
----
6
12