sql >> Base de Datos >  >> RDS >> PostgreSQL

Active SQL Trigger solo cuando un usuario en particular actualice la fila

En versiones recientes de Postgres, hay un when cláusula que puede usar para disparar condicionalmente el disparador. Podrías usarlo como:

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

No estoy al 100%, este funcionará (no puedo probar el cajero automático):

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

(Si no, intente colocarlo en un bloque if en su plpgsql.)

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

(También está la actualización [before|after] update of [col_name] sintaxis, pero tiendo a encontrarlo menos útil porque se activará incluso si el valor de la columna sigue siendo el mismo).

Agregando esta nota extra, viendo que la respuesta de @CraigRinger destaca lo que estás haciendo...

Intentar configurar la replicación maestro-maestro entre Salesforce y Postgres usando activadores condicionales es, creo, una quimera. Solo olvídalo... Va a haber mucho más que eso:necesitarás bloquear los datos según corresponda en ambos extremos (lo que no necesariamente será factible de una manera razonable), administrar los interbloqueos resultantes (que es posible que no se detecte automáticamente) y lidiar con datos contradictorios.

Sus probabilidades de lograr esto con éxito con un equipo pequeño son casi nulas, especialmente si sus habilidades de Postgres están al nivel en el que invertir tiempo en leer el manual respondería sus propias preguntas. Puede apostar con seguridad a que alguien mucho más competente en Salesforce o alguna importante tienda de SQL (por ejemplo, como para la que trabaja Craig) consideró lo mismo y fracasó miserablemente o lo descartó.

Además, destacaría que la implementación de una replicación multimaestro síncrona y eficiente no un problema resuelto. Has leído bien:no resuelto Hace solo unos años, hacerlo en absoluto no se resolvió lo suficientemente bien como para hacerlo en el núcleo de Postgres. Por lo tanto, no tiene un estado de la técnica que funcione bien para basar su trabajo e iterar sobre él.