SET TRANSACTION

Nom

SET TRANSACTION -- initialise les caractéristiques de la transaction actuelle

Synopsis

SET TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]
SET SESSION CHARACTERISTICS AS TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]

Description

La commande SET TRANSACTION initialise les caractéristiques de la transaction actuelle. Il n'a aucun effet sur les transactions suivantes. SET SESSION CHARACTERISTICS initialise les caractéristiques de la transaction par défaut pour chaque transaction d'une session. SET TRANSACTION peut le surcharger pour une transaction individuelle.

Les caractéristiques disponibles de la transaction sont le niveau d'isolation de la transaction et le mode d'accès de la transaction (lecture/écriture ou lecture seule).

Le niveau d'isolation d'une transaction détermine les données que la transaction peut voir quand d'autres transactions fonctionnent en même temps.

READ COMMITTED

Une instruction peut seulement voir les lignes validées avant qu'elle ne commence. C'est la valeur par défaut.

SERIALIZABLE

La transaction en cours peut seulement voir les lignes validées avant que la première requête ou la première instruction de modification de données ait été exécutée dans cette transaction.

Astuce : Intuitivement, sérialisable signifie que deux transactions concurrentes laisseront la base de données dans le même état que si les deux avaient été lancées strictement l'une après l'autre quelque soit l'ordre.

Le niveau d'isolation de la transaction ne peut pas être initialisé après que la première requête ou la première instruction de modification de données (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) d'une transaction ait été exécutée. Voir Chapitre 12 pour plus d'informations sur l'isolation de la transaction et le contrôle de concurrence.

Le mode d'accès de la transaction détermine si la transaction 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 qu'elles modifieraient n'est pas une table temporaire ; toutes les commandes CREATE, ALTER et DROP ; COMMENT, GRANT, REVOKE, TRUNCATE ; EXPLAIN ANALYZE et EXECUTE si la commande qu'ils exécuteraient est parmi celles listées. Ceci est une notion de haut niveau de lecture seule qui n'empêche pas les écritures sur disque.

Notes

Le niveau d'isolation par défaut de la session peut aussi être initialisé avec la commande

SET default_transaction_isolation = 'valeur'

et dans le fichier de configuration. Consultez Section 16.4 pour plus d'informations.

Compatibilité

Les deux commandes sont définies dans le standard SQL. SERIALIZABLE est le niveau d'isolation par défaut de la transaction dans le standard ; dans PostgreSQL, la valeur par défaut est habituellement READ COMMITTED, mais vous pouvez la modifier comme décrit ci-dessus. PostgreSQL ne fournit pas de niveaux d'isolation READ UNCOMMITTED et REPEATABLE READ. À cause du contrôle concurrent de multiversion, le niveau SERIALIZABLE n'est pas vraiment sérialisable. Voir Chapitre 12 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 est seulement à utiliser en SQL embarqué.