SET CONSTRAINTS
SET CONSTRAINTS — initialise le mode de vérification de
contrainte de la transaction en cours
Synopsis
SET CONSTRAINTS { ALL | nom [, ...] } { DEFERRED | IMMEDIATE }
Description
SET CONSTRAINTS
initialise le comportement de la vérification des contraintes dans
la transaction en cours. Les contraintes IMMEDIATE sont vérifiées à la fin de chaque
instruction. Les contraintes DEFERRED ne
sont vérifiées qu'à la validation de la transaction. Chaque
contrainte a son propre mode IMMEDIATE ou
DEFERRED.
À la création, une contrainte se voit donnée une des trois
caractéristiques : DEFERRABLE INITIALLY
DEFERRED, DEFERRABLE INITIALLY
IMMEDIATE ou NOT DEFERRABLE. La
troisième forme est toujours IMMEDIATE et
n'est pas affectée par la commande
SET CONSTRAINTS
. Les deux
premières classes commencent chaque transaction dans le mode
indiqué mais leur comportement peut changer à l'intérieur d'une
transaction par
SET
CONSTRAINTS
.
SET CONSTRAINTS
avec
une liste de noms de contraintes modifie le mode de ces contraintes
(qui doivent toutes être différables). Le chemin de recherche des
schémas est utilisé pour trouver le premier nom correspondant si
aucun nom de schéma n'a été indiqué.
SET CONSTRAINTS ALL
modifie le
mode de toutes les contraintes déférables.
Lorsque
SET
CONSTRAINTS
modifie le mode d'une contrainte de
DEFERRED à IMMEDIATE, le nouveau mode prend effet
rétroactivement : toute modification de données qui aurait été
vérifiée à la fin de la transaction est en fait vérifiée lors de
l'exécution de la commande
SET
CONSTRAINTS
. Si une contrainte est violée, la
commande
SET
CONSTRAINTS
échoue (et ne change pas le mode de
contrainte). Du coup,
SET
CONSTRAINTS
peut être utilisée pour forcer la
vérification de contraintes à un point spécifique d'une
transaction.
Actuellement, seules les contraintes de clés étrangères sont
affectées par ce paramétrage. Les contraintes de vérification et
les contraintes uniques sont toujours immédiates.
Notes
Cette commande altère seulement le comportement des contraintes à
l'intérieur de la transaction en cours. Du coup, si vous exécutez
cette commande en dehors d'un bloc de transaction (pair
BEGIN
/
COMMIT
), elle ne semble pas avoir
d'effet.
Compatibilité
Cette commande est compatible avec le comportement défini par le
standard SQL à part le fait que dans PostgreSQL™, elle ne s'applique qu'aux
contraintes de clés étrangères.