SET TRANSACTION
SET TRANSACTION — initialise les caractéristiques de la
transaction actuelle
Synopsis
SET TRANSACTION mode_transaction [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION mode_transaction [, ...]
où mode_transaction fait partie de :
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
Description
La commande
SET
TRANSACTION
initialise les caractéristiques de la
transaction courante. Elle est sans effet sur les transactions
suivantes.
SET SESSION
CHARACTERISTICS
positionne les caractéristiques par
défaut pour toutes les transactions à venir d'une session. Ces
valeurs peuvent ensuite être surchargées par
SET TRANSACTION
pour une
transaction particulière.
Les caractéristiques de transaction disponibles sont le niveau
d'isolation et le mode d'accès de la transaction (lecture/écriture
ou lecture seule).
Le niveau d'isolation détermine les données que la transaction peut
voir quand d'autres transactions fonctionnent concurrentiellement :
-
READ
COMMITTED
-
Une instruction ne peut voir que les lignes validées avant
qu'elle ne commence. C'est la valeur par défaut.
-
SERIALIZABLE
-
Toute instruction de la transaction en cours ne peut voir que
les lignes validées avant que la première requête ou
instruction de modification de données soit exécutée dans
cette transaction.
Le standard SQL définit deux niveaux supplémentaires, READ UNCOMMITTED et REPEATABLE
READ. Dans PostgreSQL™,
READ UNCOMMITTED est traité comme
READ COMMITTED alors que REPEATABLE READ est traité comme SERIALIZABLE.
Le niveau d'isolation de la transaction ne peut plus être modifié
après l'exécution de la première requête ou instruction de
modification de données (
SELECT
,
INSERT
,
DELETE
,
UPDATE
,
FETCH
ou
COPY
) d'une transaction. Voir
Chapitre 12,
Contrôle d'accès simultané pour plus d'informations sur
l'isolation et le contrôle de concurrence.
La méthode d'accès de la transaction détermine si elle est en
lecture/écriture ou en lecture seule. Lecture/écriture est la
valeur par défaut. Quand une transaction est en lecture seule, les
commandes SQL suivantes sont interdites : INSERT, UPDATE, DELETE et COPY FROM si la
table modifiée n'est pas temporaire ; toutes les commandes
CREATE, ALTER et
DROP ; COMMENT,
GRANT, REVOKE,
TRUNCATE ; EXPLAIN
ANALYZE et EXECUTE si la commande
exécutée figure parmi celles listées plus haut. C'est une notion de
haut niveau de lecture seule qui n'interdit pas toutes les
écritures sur disque.
Notes
Si
SET TRANSACTION
est exécuté sans
START
TRANSACTION
ou
BEGIN
préalable, il est sans
effet car la transaction se termine immédiatement.
Il est possible de se dispenser de
SET TRANSACTION
en spécifiant le
mode_transaction
désiré dans
BEGIN
ou
START TRANSACTION
.
Les modes de transaction par défaut d'une session peuvent aussi
être configurés en initialisant les paramètres de configuration
default_transaction_isolation
et default_transaction_read_only.
(En fait,
SET SESSION
CHARACTERISTICS
est un équivalent verbeux de la
configuration de ces variables avec
SET
.) Les valeurs par défaut
peuvent ainsi être initialisées dans le fichier de configuration,
via
ALTER DATABASE
,
etc. Chapitre 17,
Configuration du serveur fournit de plus amples informations.
Compatibilité
Les deux commandes sont définies dans le standard SQL. SERIALIZABLE y
est le niveau d'isolation par défaut de la transaction. Dans
PostgreSQL™, la valeur par
défaut est habituellement READ COMMITTED,
mais elle peut être modifiée comme cela est mentionné ci-dessus. À
défaut d'un prédicat vérouillé, le niveau SERIALIZABLE n'est pas vraiment sérialisable. Voir
Chapitre 12,
Contrôle d'accès simultané pour plus de détails.
Dans le standard SQL, il existe une autre caractéristique de
transaction pouvant être configurée avec ces commandes : la taille
de l'aire de diagnostique. Ce concept n'est valable que pour le SQL
embarqué et, de fait, n'est pas implanté dans le serveur
PostgreSQL™.
Le standard SQL requiert des virgules entre chaque
mode_transaction
mais, pour des raisons
historiques, PostgreSQL™
autorise l'omission des virgules.