2012-05-22 26 views
0

我需要编写一个触发器来检查表列以查看数据是否存在。触发器需要一直运行并每小时记录一次msg。postgres触发器检查数据

基本上,它会运行一个select语句如果结果发现,然后睡一个小时否则日志和睡眠一个小时

+0

你是在说一个预定的“工作”,然后在“睡眠”后重新运行(安排每小时运行一次的工作)......或者你是否在说每次插入/更新/删除记录时都会触发的触发器?我认为如果每小时运行一次,你会考虑更多预定的工作。 – Twelfth

+0

你是什么意思,“如果数据是否存在”? –

+0

在一个表中有一行带有时间戳,我想检查一行是否在最后一小时插入,如果是这样,则等待其他日志消息 – user373201

回答

1

在插入,更新或删除事件之前或之后,可以执行触发器(在pg中和我知道的每个dbms中)。您可能需要的是每小时通过类似cron(如果您使用的是unix系统)启动的脚本,将您的输出重定向到日志文件。 我用这样的事情很多次,这听起来像这样(用Python编写的):

#!/usr/bin/python 


import psycopg2 
try: 
    conn = psycopg2.connect("dbname='"+dbmane+"' user='"+user+"' host='"+hostname+"' password='"+passwd+"'") 
except: 
    # Get the most recent exception 
    exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() 
    # Exit the script and print an error telling what happened. 
    logging.debug("I am unable to connect to the database!\n ->%s" % (exceptionValue)) 
    exit(2) 

cur = conn.cursor() 

query = "SELECT whatever FROM wherever WHERE yourconditions" 
try: 
    cur.execute(query) 
except ProgrammingError: 
    print "Programming error, no result produced" 
result = cur.fetchone() 

if(result == None): 
    #do whatever you need, if result == None the data is not in your table column 

我曾经通过cron来启动我的脚本每隔10分钟,你可以很容易地将其配置为启动脚本每隔一小时重定向它的输出到您选择的日志文件。

如果你在一个Windows环境下工作,那么你会找到类似cron的东西。 我不认为触发器可以帮助你做到这一点,它们只有在发生了一些事件后才会触发(如果插入的数据是每小时都要检查的数据,则可以使用触发器检查每次插入后的事件,但这不是同样,通过脚本来完成是我的经验中最好的解决方案)

2

你想要的是一个预定作业。 pgAgent:http://www.pgadmin.org/docs/1.4/pgagent.html创建一个小时工作,检查该行,然后根据需要进行日志记录。

编辑以添加: 好奇心如果您已经考虑编写一个SQL脚本,通过阅读表格而不是作业来即时生成日志。如果您有时间戳字段,则很可能会有一个脚本返回在该时间范围内没有相应条目的所有小时期(假定时间戳未更新)。为什么要直接根据数据生成第二个日志?