如何在PostgresSQL中的每个INSERT操作上触发

时间:2019-08-05 13:36:58

标签: postgresql typeorm

我在API中使用Typeorm。问题是<!--HTML data looks like this:--> <table id="PLTable"> <thead> <tr> <th>cost estimate</th> <th>cost actual</th> </tr> </thead> <tr> <td class = "cost_estimate">100</td> <td class = "act_cost"></td> </tr> <tr> <td class = "cost_estimate">100</td> <td class = "act_cost">50</td> </tr> </table> <div id="cost_projected_total"> </div>在提交事务之前触发了用户挂钩。那是因为它不依赖ORM本身的DB。它禁止我访问该挂钩中发生的所有事情中的数据记录,因为该事务仍在进行中。您能给我一些有关如何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:0)

一种方法是使用外部事件代理。

您在订户代码中推送到经纪人,例如Redis队列,Rabbitmq,aws SQS或kinesis,kafka ...

您在另一个代码中侦听队列,这时您的第一笔交易应已提交。您将处理一个单独的事务,并可以实现可以依赖于第一个事务的提交数据的订户代码。

如果第一次事务的提交时间很长,那么使用typeorm订阅服务器将无法使用,因为即使使用事件代理,您也无法保证事务已提交。因此,您只需在事务完成后添加代码以推送到代理中,或依靠可以推送事件代理的sql触发器,或基于typeorm的version列实现重试系统,以确保更新已提交,最适合免费重试的事件代理,例如kafka或SQS。