1

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

基本上,如果找到结果,它将运行一个选择语句,然后休眠一个小时,否则记录并休眠一个小时

4

2 回答 2

2

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

编辑添加:好奇您是否考虑编写一个 SQL 脚本,通过读取表而不是作业来动态生成日志。如果您有时间戳字段,则很有可能有一个脚本返回在该时间范围内没有相应条目的所有小时时段(假设时间戳未更新)。当您可以直接针对数据生成第二个日志时,为什么还要存储它呢?

于 2012-05-22T18:59:16.807 回答
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

我过去每 10 分钟通过 cron 启动我的脚本,您可以轻松地将其配置为每小时启动一次脚本,将其输出重定向到您选择的日志文件。

如果您在 Windows 环境中工作,那么您将寻找类似 cron 的东西。我不认为触发器可以帮助您,它们仅在某些事件后触发(您可以使用触发器在每次插入后检查插入的数据是否是您想要每小时检查的数据,但它不一样,根据我的经验,通过脚本来做是最好的解决方案)

于 2012-05-22T19:03:43.410 回答