Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Ejecutar Trigger pasado cierto tiempo

Estas en el tema de Ejecutar Trigger pasado cierto tiempo en el foro de PostgreSQL en Foros del Web. Bueno no sé si se podra hacer eso pero lo que quiero es que cada vez que se haga una inserción en una tabla se ...
  #1 (permalink)  
Antiguo 07/08/2014, 17:26
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 10 años, 3 meses
Puntos: 0
Exclamación Ejecutar Trigger pasado cierto tiempo

Bueno no sé si se podra hacer eso pero lo que quiero es que cada vez que se haga una inserción en una tabla se llame a un trigger que espere 3 horas después de hecha dicha inserción y cambie su estado de la tabla.
Le explico tengo una tabla en postgresql de reservaciones, cada vez que se haga una reservacion se guarda en la tabla con un estado inicial que significa "En Proceso" en este estado el usuario puede cancelar dicha reserva pero solo tiene 3 horas para hacerlo, una vez pasada esas 3 horas el estado de la tabla cambiara y ya no podrá cancelarse
  #2 (permalink)  
Antiguo 07/08/2014, 18:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ejecutar Trigger pasado cierto tiempo

Ajá..
¿Y estás seguro de haber entendido el concepto de "TRIGGER"?
Lo que quieres hacer no se hace con ese tipo de rutinas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/08/2014, 18:11
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Ejecutar Trigger pasado cierto tiempo

Si supiera como se haría no estuviera aquí consultandolo... Solo busco que alguien me de alguna ayuda para solucionar ese problema
  #4 (permalink)  
Antiguo 07/08/2014, 18:43
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Ejecutar Trigger pasado cierto tiempo

CREATE OR REPLACE FUNCTION flogout() RETURNS trigger AS
$body$
sleep(seconds=5);
update t_administrador set tx_status='off' where co_admin='VIEIRAMS';
$body$
LANGUAGE sql;



CREATE TRIGGER logoutadmin after UPDATE ON t_administrador
FOR EACH ROW EXECUTE PROCEDURE flogout();


Encontré algo asi en la web podría utilizar ese método sleep para hacer lo que busco?

Última edición por ricardo_2395; 07/08/2014 a las 18:48
  #5 (permalink)  
Antiguo 08/08/2014, 09:32
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: Ejecutar Trigger pasado cierto tiempo

Hola que tal, bueno no entendi muy bien lo que vas a hacer.

Yo veo que quieres insertar en una tabla, pero despues de 3 hrs, esto es por si cancelan, pero no entiendo para que hacerlo despues de 3 hrs.

Ami se me ocurre que tengas una tabla intermedia, en la que se hagan el grabado de la información y si cancelan, simplemente lo borres de dicha tabla, ya despues puedes pasar la información a otra tabla, si asi lo deseas

No es bueno complicarse tanto la vida, si puede ser mas sencillo de lo que es

El trigger, no te funcionara para este caso o mejor dicho, yo no le veo un buen uso.
__________________
Your Code as a Crime Scene...
  #6 (permalink)  
Antiguo 08/08/2014, 10:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ejecutar Trigger pasado cierto tiempo

Vamos a lo básico: Un trigger es una rutina que realiza una acción ante un evendo directo sobre la tabla, definiendo como tales sólo los INSERT, UPDATE y DELETE. Su acción es instantanea y genera un bloqueo sobre la tabla en la que se definen, en tanto el trigger se ejecuta.
En PostgreSQL, se admite que la lógica de un TRIGGER esté separada del cuerpo del trigger mismo, y depositada en una stored function. Esto no sucede con otros DBMS. Pero una condición mandatoria en todos los DBMS sobre los TRIGGER es que no se puede generar un trigger que invoque una acción que vuelva a disparar el trigger, o que pueda disparar otro sobre la misma tabla. Ese tipo de situaciones no son licitas.
Pero una condición que compoarten todos los DBMS rtambién, es que un TRIGGER, como cualquier acción sobre tablas, debe tener un tiempo de terminación finito y reducido, que debe ser menor al timeout definido globalmenbte para los procesos... y no puedes, ni te conviene hablar de timeouts de 10.800 segudos. Eso es simplemente absurdo.
Ahora bien, existen dentro de Postgre ciertos recursos de uso posible que son los EVENT TRIGGER, que no son exactamente lo mismo. Es probable que te refieras a ellos y que sea eso lo que necesites.
http://www.postgresql.org/docs/8.4/s...pq-events.html
http://www.postgresql.org/docs/9.3/s...-triggers.html
De lo contrario, yo pensaría sreiamente en usar el cron (Linux) o tareas Programadas (Win) para invocar un proceso de ejecución por tiempo que realice la tarea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:28.