41.4. Visibilité des modifications de données
Les règles suivantes gouvernent la visibilité des modifications de
données dans les fonctions qui utilisent SPI (ou tout autre fonction
C) :
-
Pendant l'exécution de la commande SQL, toute modification de
données faite par la commande est invisible à la commande. Par
exemple, dans la commande
INSERT INTO a SELECT * FROM a;
les lignes insérées sont invisibles à la partie
SELECT
.
-
Les modifications effectuées par une commande C sont visibles
par toutes les commandes qui sont lancées après C, peu importe
qu'elles soient lancées à l'intérieur de C (pendant l'exécution
de C) ou après que C soit terminée.
-
Les commandes exécutées via SPI à l'intérieur d'une fonction
appelée par une commande SQL (soit une fonction ordinaire soit
un déclencheur) suivent une des règles ci-dessus suivant le
commutateur lecture/écriture passé à SPI. Les commandes
exécutées en mode lecture seule suivent la première règle :
elles ne peuvent pas voir les modifications de la commande
appelante. Les commandes exécutées en mode lecture/écriture
suivent la deuxième règle : elles peuvent voir toutes les
modifications réalisées jusqu'à maintenant.
-
Tous les langages standards de procédures initialisent le mode
lecture/écriture suivant l'attribut de volatilité de la
fonction. Les commandes des fonctions STABLE et IMMUTABLE
sont réalisées en mode lecture seule alors que les fonctions
VOLATILE sont réalisées en mode
lecture/écriture. Alors que les auteurs de fonctions C sont
capables de violer cette convention, il est peu probable que
cela soit une bonne idée de le faire.
La section suivante contient un exemple qui illustre l'application de
ces règles.