PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Задействане на SQL Trigger само когато определен потребител актуализира реда

В последните версии на Postgres има when клауза, която можете да използвате за условно задействане на тригера. Можете да го използвате като:

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

Не съм 100% сигурен, че този ще работи (не мога да тествам банкомат):

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

(Ако не, опитайте да го поставите в блок if във вашия plpgsql.)

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

(Има и актуализацията [before|after] update of [col_name] синтаксис, но го намирам за по-малко полезен, защото ще се задейства дори ако стойността на колоната остане същата.)

Добавяйки тази допълнителна бележка, виждайки, че отговорът на @CraigRinger подчертава какво правите...

Опитът да се настрои репликация master-master между Salesforce и Postgres с помощта на условни тригери е, според мен, празна мечта. Просто го забравете... Ще има много повече от това:ще трябва да заключите данните както е уместно от двата края (което не е задължително да е осъществимо по разумен начин), да управлявате произтичащите блокирания (които може да не се открие автоматично) и да работи с противоречиви данни.

Вашите шансове да се справите успешно с това с малък екип е около нула - особено ако уменията ви за Postgres са на ниво, при което инвестирането на време в четене на ръководството би отговорило на вашите собствени въпроси. Можете спокойно да се обзаложите, че някой много по-компетентен в Salesforce или някой голям SQL магазин (напр. като този, за който работи Крейг) е счел същото и или се е провалил, или е отхвърлил.

Нещо повече, бих подчертал, че прилагането на ефективна, синхронна репликация с множество главни устройства не решен проблем. Правилно прочетохте:не решен. Само преди няколко години го правех въобще не беше достатъчно добре решен, за да влезе в ядрото на Postgres. Така че нямате предшестващо състояние на техниката, което да работи добре, върху което да базирате работата си и да го използвате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли начин да се дефинира именувана константа в заявка на PostgreSQL?

  2. Проектиране на структура на данни за поддръжка на репликация на база данни

  3. Репликация на Londiste с PostgreSQL 9.0

  4. PostgreSQL + Rails citext

  5. Как в Postgres ограничавате възможните стойности за определена колона?