有Postgres里的触发器,当特定表被更新时调用。 它是用来更新发送到另一个API。
有没有一种方法可以控制这个触发的触发? 有时,当我更新表,我不想触发被解雇。 我该怎么做呢? 是否有一个沉默触发SQL语法?
如果不
我可以引发触发器,当行由PG用户X更新,当PG用户Y更新表没有触发器应该被开除?
有Postgres里的触发器,当特定表被更新时调用。 它是用来更新发送到另一个API。
有没有一种方法可以控制这个触发的触发? 有时,当我更新表,我不想触发被解雇。 我该怎么做呢? 是否有一个沉默触发SQL语法?
如果不
我可以引发触发器,当行由PG用户X更新,当PG用户Y更新表没有触发器应该被开除?
在最近的Postgres版本中,有一个when
,你可以用它来有条件地触发触发器条款。 你可以使用它像:
... when (old.* is distinct from new.*) ...
我不是100%,这其中就可以了(不能测试ATM):
... when (current_user = 'foo') ...
(如果没有,请尝试将它放在您的PLPGSQL如果块)。
http://www.postgresql.org/docs/current/static/sql-createtrigger.html
(还有就是[before|after] update of [col_name]
语法,但我倾向于认为它用处不大,因为它会触发即使列的值保持不变。)
添加此额外的笔记,看到@ CraigRinger的回答凸显你在做什么?
试图与Salesforce和Postgres的使用条件触发器设置主 - 主复制,我认为,一个白日梦。 只是忘了......还有的将是一个很多比这更多了:你需要锁定两端适当数据为(这不一定会以合理的方式是可行的),管理产生的死锁(这可能无法自动获得被检测),并处理冲突的数据。
你的一个小小的团队成功地拉动这一关赔率约为约零 - 特别是如果你的Postgres的技能是在哪里阅读本手册会回答自己的问题投入时间的水平。 您可以放心地打赌,有人在Salesforce的更称职或一些重要的SQL商店(例如像一个克雷格工程)认为是相同的,并且或者悲惨地失败或排除它。
此外,我会强调实现高效,同步的,多主复制不是解决问题。 你看的没错: 没有解决。 就在几年前,这样做根本没有得到很好的解决了足以令它在Postgres的核心。 所以,你已经没有现有技术能很好地基础工作并迭代后。
这似乎是同样的问题,因为这个帖子几分钟前 ,从不同的方向接近它。
如果是这样,而你的确可以做到丹尼斯暗示, 不要试图彻底改造这个轮子 。 如果您正试图双向(多主)复制使用诸如Slony聚-I或Bucardo这是一个既定的工具。 您还需要了解与冲突更新打交道时,参与多主的主要限制。
在一般情况下,有控制触发器触发的几种方法:
让触发火,然后把逻辑在PL / pgSQL触发器身体原因如果满足特定条件就不会采取任何行动。 这通常是当规则是非常复杂的唯一选择。
丹尼斯指出,使用触发器WHEN
子句条件触发触发器
使用session_replication_role
控制所有触发器的触发
直接启用/禁用触发器 。
特别是,如果您的应用程序共享一个SQL级别的用户ID来进行数据库访问并执行SQL水平高于其自己的用户管理,并要控制触发器触发对每个用户的基础上,只有这样,才能做到这一点会与在触发逻辑。 您可能会发现有关获取用户ID内触发有用在此之前的答案:
通过用户ID到PostgreSQL触发器