Feu de déclenchement de la mise à jour de columnA ou Colonneb ou ColumnC
J'ai le code pour activer un déclencheur uniquement sur une mise à jour d'une seule colonne spécifique. Le déclencheur est utilisé pour déclencher une fonction qui va soulever une postgres "informer" de l'événement, dont je suis à l'écoute et aurez besoin de tester et de valider la nouvelle de l'entrée des détails de. Il existe de nombreuses valeurs sur le account_details tableau qui pourrait être un changement qui ne nécessite pas de compte de valider, donc un déclencheur sur APRÈS la mise à JOUR uniquement (sans date) n'est pas bon.
CREATE TRIGGER trigger_update_account_details
AFTER UPDATE ON account_details
FOR EACH ROW
WHEN (OLD.email IS DISTINCT FROM NEW.email)
EXECUTE PROCEDURE notify_insert_account_details();
Mais je vous voulez tirer sur la gâchette si l'une des nombreuses colonnes de changement, quelque chose comme
WHEN (OLD.email IS DISTINCT FROM NEW.email OR
OLD.username IS DISTINCT FROM NEW.username OR
OLD.password IS DISTINCT FROM NEW.password)
Mais OU n'est pas un mot clé valide pour un déclenchement. En essayant de recherche pour le mot clé à utiliser à la place de OU ne semble pas apporter quoi que ce soit en raison de la nature de la parole, OU 🙁
OriginalL'auteur Martin | 2014-08-21
Vous devez vous connecter pour publier un commentaire.
C'est une sorte de malentendu. Le
QUAND
de la clause de la définition du déclencheur s'attend à une expression booléenne et vous pouvez utiliser autant deOR
opérateurs comme vous le souhaitez. Cela devrait fonctionner (étant donné que toutes les colonnes existent réellement dans le tableauaccount_details
), je suis en utilisant semblables moi-même:L'évaluation de l'expression a un petit coût, mais c'est probablement va être plus exacte que l'alternative:
Parce que, par la documentation:
Puisque vous avez mentionné de nombreux colonnes. Vous pourrait raccourcir la syntaxe avec
LIGNE
syntaxe de type (faire de même):Ou, Si vous voulez vérifier chaque visible colonne utilisateur en ligne:
when
état et explicitement liste des colonnes de laupdate on ...
clausele
WHEN
condition est légèrement plus cher (l'expression doit être évaluée), mais les résultats sont également subtilement différentes dans un certain nombre de façons. J'ai ajouté un peu de ma réponse.Si quelqu'un soucis au sujet de la performance avec les
WHEN
clause, mais il veut leur déclencheurs être exécutée uniquement si il y a un réel changement: ces 2 solutions peuvent être combinées.Bonne idée. Mais l'exactitude est la première préoccupation: le ci-dessus peut déclencher un incendie où la solution n'est pas (et l'inverse) - comme indiqué dans le devis. Lors de l'application à la fois, les deux conditions doivent être remplies. Cela dépend des exigences précises.
Non applicable à cette question particulière, mais j'ai ajouté pour le rendre complet. Je vous propose la plus courte, soit l'équivalent de la syntaxe, si:
WHEN (OLD IS DISTINCT FROM NEW)
- et les parenthèses sont obligatoires. Tout en étant à elle, j'ai également ajouté une autre réponse ...OriginalL'auteur Erwin Brandstetter
Je ne pense pas que vous avez besoin de la
WHEN
clause. Vous pouvez spécifier les colonnes en question dans la clause de mise à JOUR:OriginalL'auteur a_horse_with_no_name