如何:通知应用程序数据库表行已更新?

我正在开发基于Windows的应用程序,使用PostgreSQL将执行的过程

  1. 从UI获取信息
  2. 执行一些逻辑并将相关信息存储到数据库
  3. 存储的信息必须立即或按照计划间隔(例如xyzdate的5:00)通过networking发送

目前,我们已经开发了dispacher机制(线程),它不断地轮询数据库插入数据库中的新信息。 线程获取信息并发送到networking模块。

但是,我觉得这不是正确的做法

  1. 每次轮询都是一个开销。 有些时候没有什么可执行的
  2. 这不是实时的,因为我们每5秒钟就会进行一次轮询

所以

  1. 在数据库中更新信息后,是否有办法将触发器发送到我的networking模块?

  2. 或者有更好的方法来完成这个任务?

提前致谢。

是的,你是正确的@RDX,你不应该每次轮询它,而是你可以在Postgres中写一个触发器,并从这个触发器尝试调用一个Java程序,可以在下面的线程看到。

从Postgres触发器调用java pgm

您可以使用PostgreSQL的listen / notify功能。

对这些消息感兴趣的客户端会执行一个listen语句,触发器会notify他们。

我不使用C#,但根据手册,您可以异步方式检索邮件 – 这仍然涉及一些“轻量级”轮询,因为通知邮件只作为服务器的答案的一部分发送。 手册声称运行一个“空”语句(如; )就足够了。 使用Java / JDBC我使用了一个简单的select 42 ,它不会在服务器上施加很大的工作负载,因为没有任何表被触摸。

这个轮询比实际检索表的数据明确得更快,更具可扩展性。