W najnowszych wersjach Postgresa występuje when
klauzula, której możesz użyć do warunkowego uruchomienia wyzwalacza. Możesz go użyć tak:
... when (old.* is distinct from new.*) ...
Nie jestem w 100%, ten będzie działał (nie mogę przetestować bankomatu):
... when (current_user = 'foo') ...
(Jeśli nie, spróbuj umieścić go w bloku if w swoim plpgsql.)
http://www.postgresql.org/docs/current/static /sql-createtrigger.html
(Istnieje również [before|after] update of [col_name]
składnia, ale wydaje mi się, że jest mniej przydatna, ponieważ uruchomi się, nawet jeśli wartość kolumny pozostanie taka sama.)
Dodając tę dodatkową uwagę, widząc, że odpowiedź @CraigRinger podkreśla, co zamierzasz...
Próba skonfigurowania replikacji master-master między Salesforce a Postgresem za pomocą wyzwalaczy warunkowych to, jak sądzę, mrzonka. Po prostu zapomnij o tym... Będzie o wiele więcej:będziesz musiał odpowiednio zablokować dane na obu końcach (co niekoniecznie będzie wykonalne w rozsądny sposób), zarządzać wynikającymi z tego zakleszczeniami (co może nie zostać automatycznie wykryty) i radzić sobie ze sprzecznymi danymi.
Twoje szanse na udane wykonanie tego zadania z małym zespołem są bliskie zeru – zwłaszcza jeśli Twoje umiejętności Postgres są na poziomie, na którym poświęcenie czasu na przeczytanie podręcznika pozwoliłoby ci odpowiedzieć na twoje pytania. Możesz spokojnie założyć się, że ktoś o wiele bardziej kompetentny w Salesforce lub w jakimś dużym sklepie SQL (np. takim, dla którego pracuje Craig) uważał to samo i albo żałośnie zawiódł, albo to wykluczył.
Co więcej, chciałbym podkreślić, że implementacja wydajnej, synchronicznej replikacji z wieloma wzorcami nie rozwiązany problem. Dobrze przeczytałeś:nie rozwiązany. Zaledwie kilka lat temu robiłem to w ogóle nie był wystarczająco dobrze rozwiązany, aby znaleźć się w rdzeniu Postgresa. Więc nie masz wcześniejszej sztuki, która dobrze sprawdzałaby się, aby oprzeć swoją pracę i na niej iterować.