在更新事件后接收不同连接上的不同数据


Receving different data on different connections on AFTER UPDATE event

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

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 进程 BC 通知要检查的数据集。

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

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

任何建议为什么?

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

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

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