项目中有段ESQL代码是轮询方式查数据表中,是否有符合时间限制的数据,限制条件是当前2小时前的数据,如果没有,就sleep固定时间后,再轮询。示例代码如下:
这段代码使用了postgres的日期函数localtimestamp取当前时间,减去interval `2 hours'作为查询条件,查看是否有合适的数据。在第一次进processData函数时,数据库有数据的情况下,处理过程正常。但是当进入processData循环时,如果开始没有合适数据,但是sleep一段时间以后,表中数据符合条件时,hasAvailableData却并不能查出。查了postgresql的文档,文档9.9.4. 当前日期/时间中有这么一段话:
所以上面代码的问题猜测是由于事务引起的。修改hasAvailableData函数如下:
sql查询完毕后,提交事务,这个问题就解决了。 |