PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Lancer le déclencheur SQL uniquement lorsqu'un utilisateur particulier met à jour la ligne

Dans les versions récentes de Postgres, il y a un when clause que vous pouvez utiliser pour déclencher conditionnellement le déclencheur. Vous pouvez l'utiliser comme :

... when (old.* is distinct from new.*) ...

Je ne suis pas sûr à 100 % que celui-ci fonctionnera (je ne peux pas tester atm) :

... when (current_user = 'foo') ...

(Sinon, essayez de le placer dans un bloc if de votre plpgsql.)

http://www.postgresql.org/docs/current/static /sql-createtrigger.html

(Il y a aussi la mise à jour [before|after] update of [col_name] syntaxe, mais j'ai tendance à la trouver moins utile car elle se déclenchera même si la valeur de la colonne reste la même.)

Ajout de cette note supplémentaire, voyant que la réponse de @CraigRinger met en évidence ce que vous faites...

Essayer de mettre en place une réplication maître-maître entre Salesforce et Postgres à l'aide de déclencheurs conditionnels est, je pense, une chimère. Oubliez ça... Il y aura bien plus que cela :vous devrez verrouiller les données de manière appropriée des deux côtés (ce qui ne sera pas nécessairement faisable de manière raisonnable), gérer les blocages qui en résultent (qui peuvent ne pas être détectés automatiquement) et gérer les données en conflit.

Vos chances de réussir cela avec une petite équipe sont à peu près nulles - surtout si vos compétences Postgres sont au niveau où investir du temps dans la lecture du manuel répondrait à vos propres questions. Vous pouvez parier en toute sécurité que quelqu'un de beaucoup plus compétent chez Salesforce ou dans une grande boutique SQL (par exemple, comme celui pour lequel Craig travaille) a considéré la même chose, et a lamentablement échoué ou l'a exclu.

De plus, je soulignerais que la mise en œuvre d'une réplication efficace, synchrone et multi-maître n'est pas un problème résolu. Vous avez bien lu :pas résolu. Il y a quelques années à peine, je le faisais du tout n'était pas assez bien résolu pour être intégré au noyau de Postgres. Vous n'avez donc pas d'art antérieur qui fonctionne bien sur lequel baser votre travail et le réitérer.