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

Receving different data on different connections on AFTER UPDATE event

我 运行 几个并行进程,每个进程都打开了到 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 进程 BC[= 通知33=] 关于要检查的数据集。

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

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

有什么建议吗?

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

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

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