在AFTER UPDATE事件上接收不同连接上的不同数据

时间:2016-01-21 10:49:52

标签: php firebird

我运行几个并行进程,每个进程都与firebirdSQL数据库打开连接。一个进程将捕获firebird发布的更新事件:

SET TERM ^ ;

CREATE TRIGGER CM_ARTIKEL_AU FOR ARTIKEL
ACTIVE AFTER UPDATE
POSITION 0
AS
BEGIN
  /* Trigger body */
  Insert into CM_ARTIKEL_CHANGES(
     "TYPE",
     ARTNR
  )
  values (
     'UPDATE',
     old.ARTIKELNR
  );  

  POST_EVENT 'UPDATE_ARTICLE';
END^

SET TERM ; ^

情境:

处理 A 捕获AFTER_UPDATE事件,并通过rabbitMQ流程 B C 通知要检查的数据集。

处理 B 执行select语句并检索更新的数据。一切都很好。

处理 C 执行select语句并在执行更新之前检索 OLD 数据!

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

通常,当您看到旧数据时,您正在使用在提交数据更改之前启动的具有隔离级别快照(也称为并发)的事务。

当进程C查询数据以响应通知时,您需要确保它结束(提交)旧事务并启动新事务以获取更新数据。

另一种方法是使用具有隔离级别读取提交的事务,但这可能有其缺点,具体取决于应用程序的作用。