PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uruchom wyzwalacz SQL tylko wtedy, gdy konkretny użytkownik zaktualizuje wiersz

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ć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. gem install pg nie może powiązać z libpq

  2. Jak zachować dane w zadokowanej bazie danych postgres przy użyciu woluminów?

  3. Jak nie wyświetlać hasła w postaci zwykłego tekstu podczas łączenia się z postgresem przez sqlalchemy, psycopg2?

  4. Heroku pg:przywracanie kopii zapasowych nie powiodło się z powodu przekroczenia limitu czasu aplikacji Rails

  5. Jak wypełnić klucze obce tabeli z innych tabel