cod*_*and 1 sql postgresql triggers
postgres 中有一个触发器,每当更新特定表时就会调用该触发器。它用于将更新发送到另一个 API。
有没有一种方法可以控制这个触发器的触发?有时,当我更新表时,我不希望触发触发器。我该怎么做呢?有沉默触发sql语法吗?
如果不
当 PG 用户 X 更新行并且 PG 用户 Y 更新表时,不应触发触发器,我可以触发触发器吗?
在最新的 Postgres 版本中,有一个when子句可用于有条件地触发触发器。你可以这样使用它:
... when (old.* is distinct from new.*) ...
Run Code Online (Sandbox Code Playgroud)
我不是 100% 这个能用(无法测试 atm):
... when (current_user = 'foo') ...
Run Code Online (Sandbox Code Playgroud)
(如果没有,请尝试将其放入 plpgsql 中的 if 块中。)
http://www.postgresql.org/docs/current/static/sql-createtrigger.html
(还有[before|after] update of [col_name]语法,但我倾向于发现它不太有用,因为即使列的值保持不变它也会触发。)
添加这个额外的注释,看到@CraigRinger的答案突出显示了你正在做什么......
我认为,尝试使用条件触发器在 Salesforce 和 Postgres 之间设置主主复制是一个白日梦。忘记它吧……还有更多的事情要做:您需要在两端适当地锁定数据(这不一定以合理的方式可行),管理由此产生的死锁(这可能不会自动检测到),并处理冲突的数据。
你用一个小团队成功完成这个任务的几率几乎为零——特别是如果你的 Postgres 技能达到了花时间阅读手册就能回答你自己的问题的水平。您可以放心地打赌,Salesforce 或某个主要 SQL 商店(例如 Craig 工作的那个)中更有能力的人也认为是相同的,并且要么悲惨地失败,要么将其排除在外。
此外,我要强调的是,实现高效、同步、多主复制并不是一个已解决的问题。你没看错:没有解决。就在几年前,这件事还没有得到很好的解决,不足以使其进入 Postgres 核心。因此,您没有任何现有技术可以很好地作为您的工作的基础和迭代。
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |