disparador postgres para verificar datos

Necesito escribir un disparador que verifique una columna de la tabla para ver si hay datos o no. El activador debe ejecutarse todo el tiempo y registrar mensajes cada hora.

Básicamente, ejecutará una declaración de selección si se encuentra el resultado, luego dormirá durante una hora, de lo contrario, iniciará sesión y dormirá durante una hora.

preguntado el 22 de mayo de 12 a las 19:05

¿Está hablando de un 'trabajo' programado que se ejecuta y luego se vuelve a ejecutar después de 'dormir' (¿programar un trabajo que se ejecuta cada hora?)... o está hablando de un activador que se activaría cada vez que se inserta/actualiza/ un registro borrado? Creo que está pensando más en el trabajo programado si se ejecuta cada hora. -

¿Qué quiere decir exactamente con "si los datos están ahí o no"? -

En una tabla hay una fila con marca de tiempo, quiero verificar si se insertó una fila en la última hora, si es así, espere a registrar un mensaje:

2 Respuestas

Lo que quieres es un trabajo programado. agente pg: http://www.pgadmin.org/docs/1.4/pgagent.html cree un trabajo por hora que verifique esa línea y luego registre según sea necesario.

Editar para agregar: Curioso si ha considerado escribir un script SQL que genera el registro sobre la marcha leyendo la tabla en lugar de un trabajo. Si tiene un campo de marca de tiempo, es muy posible tener una secuencia de comandos que devuelva todos los períodos de horas que no tienen una entrada correspondiente dentro de ese marco de tiempo (suponiendo que la marca de tiempo no esté actualizada). ¿Por qué almacenar un segundo registro cuando puede generarlo directamente contra los datos?

contestado el 22 de mayo de 12 a las 20:05

Los activadores (en pg y en todos los dbms que conozco) pueden ejecutarse antes o después de eventos como insertar, actualizar o eliminar. Lo que probablemente quieras aquí es un script lanzado a través de algo como cron (si está utilizando un sistema Unix) cada hora, redirigiendo su salida al archivo de registro. Usé algo como esto muchas veces y sonaba así (escrito en 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

Solía ​​iniciar mi secuencia de comandos a través de cron cada 10 minutos, puede configurarlo fácilmente para iniciar la secuencia de comandos cada hora redirigiendo su salida al archivo de registro de su elección.

Si está trabajando en un entorno de Windows, entonces estará buscando algo como cron. No creo que un disparador pueda ayudarlo con esto, se activan solo después de algunos eventos (puede usar un disparador para verificar después de cada inserción si los datos insertados son los que desea verificar cada hora, pero no es lo mismo , hacerlo a través de un script es la mejor solución en mi experiencia)

contestado el 22 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.