设为首页
收藏本站
淘宝精选
开启辅助访问
登录
注册后绑定Q登陆
手机号登录
手机号码,快捷登录
微信登录
QQ登录
快捷导航
发布信息
搜索
搜索
支持我们
使用96IE来支持论坛
首页
任务
勋章
签到
签到等于每天打卡
导读
邀请码
装机必备的软件、去广告版
装机助手
装机网
精品操作系统下载
免费邀请码
记录
Doing
每日签到
本版
帖子
用户
PCOS技术网
»
首页
›
≡技术交流≡
›
电脑技术交流
›
postgresql中使用时间函数需要注意的一个问题 ...
返回列表
发新帖
查看:
563
|
回复:
0
postgresql中使用时间函数需要注意的一个问题
[复制链接]
amwdnuff
amwdnuff
当前离线
积分
10395260
IP卡
狗仔卡
签到天数: 2624 天
连续签到: 3 天
[LV.Master]至尊海神IIIIII
发表于 2010-10-14 19:25
|
广东
|
显示全部楼层
|
阅读模式
postgresql中使用时间函数需要注意的一个问题
项目中有段ESQL代码是轮询方式查数据表中,是否有符合时间限制的数据,限制条件是当前2小时前的数据,如果没有,就sleep固定时间后,再轮询。示例代码如下:
int hasAvailableData(String t
项目中有段ESQL代码是轮询方式查数据表中,是否有符合时间限制的数据,限制条件是当前2小时前的数据,如果没有,就sleep固定时间后,再轮询。示例代码如下:
int hasAvailableData(String timeBefore)
{
EXEC SQL BEGIN DECLARE SECTION;
int recs=0;
char * timeStr = timeBefore
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT count(*) into :recs from datatable where flag=0 and(occurtime<localtimes**p - interval :timeStr);
if ( 0 > sqlca.sqlcode )
{
return -1;
}
return recs;
}
int processData()
{
while(1)
{
if (hasAvailableData("2 hours") == -1) return -1;
if (recs > 0) break;
sleep(interval);
}
doit();
return 0;
}
这段代码使用了postgres的日期函数localtimes**p取当前时间,减去interval `2 hours'作为查询条件,查看是否有合适的数据。在第一次进processData函数时,数据库有数据的情况下,处理过程正常。但是当进入processData循环时,如果开始没有合适数据,但是sleep一段时间以后,表中数据符合条件时,hasAvailableData却并不能查出。查了postgresql的文档,文档9.9.4. 当前日期/时间中有这么一段话:
还有一件事提醒大家,那就是 CURRENT_TIMES**P 和相关的函数把时间当做当前事务的开始返回;在事务运行的时候, 它们的数值并不改变。 我们认为这是一个特性:目的是为了允许一个事务在"当前" 时间上有连贯的概念,这样在同一个事务离得多个修改可以有同样的时间戳。
所以上面代码的问题猜测是由于事务引起的。修改hasAvailableData函数如下:
int hasAvailableData(String timeBefore)
{
EXEC SQL BEGIN DECLARE SECTION;
int recs=0;
char * timeStr = timeBefore
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT count(*) into :recs from datatable where flag=0 and(occurtime<localtimes**p - interval :timeStr);
if ( 0 > sqlca.sqlcode )
{
return -1;
}
//避免下次查询使用同样的时刻,需要重新开始另外一个事务
EXEC SQL COMMIT;
return recs;
}
sql查询完毕后,提交事务,这个问题就解决了。
PCOS系统下载站:http://zhuangji.wang
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
抢沙发
千斤顶
显身卡
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册后绑定Q登陆
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
浏览过的版块
休闲广场
科技 财经 交通