PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Acionar o SQL Trigger somente quando um usuário específico atualizar a linha


Nas versões recentes do Postgres, existe um when cláusula que você pode usar para disparar condicionalmente o gatilho. Você poderia usá-lo como:
... when (old.* is distinct from new.*) ...

Eu não estou 100% este vai funcionar (não pode testar atm):
... when (current_user = 'foo') ...

(Se não, tente colocá-lo em um bloco if em seu plpgsql.)

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

(Há também a atualização [before|after] update of [col_name] sintaxe, mas costumo achar menos útil porque será acionado mesmo que o valor da coluna permaneça o mesmo.)

Adicionando esta nota extra, vendo que a resposta de @CraigRinger destaca o que você está fazendo ...

Tentar configurar a replicação mestre-mestre entre o Salesforce e o Postgres usando gatilhos condicionais é, eu acho, um sonho. Apenas esqueça... Haverá muito mais do que isso:você precisará bloquear os dados conforme apropriado em ambas as extremidades (o que não será necessariamente viável de maneira razoável), gerenciar os impasses resultantes (que pode não ser detectado automaticamente) e lidar com dados conflitantes.

Suas chances de fazer isso com sucesso com uma equipe pequena são cerca de zero - especialmente se suas habilidades no Postgres estiverem no nível em que investir tempo na leitura do manual responderia às suas próprias perguntas. Você pode apostar com segurança que alguém muito mais competente no Salesforce ou em alguma grande loja de SQL (por exemplo, como a que Craig trabalha) considerou o mesmo e falhou miseravelmente ou descartou.

Além disso, enfatizo que a implementação de replicação eficiente, síncrona e multimestre não um problema resolvido. Você leu certo:não resolvido. Apenas alguns anos atrás, fazendo isso tudo não foi bem resolvido o suficiente para torná-lo no núcleo do Postgres. Portanto, você não tem arte anterior que funcione bem para basear seu trabalho e iterar.