Re: [pgsql-es-ayuda] Materializar cambios dentro de función

From: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
To: noXat <lista-postgres(at)3f22(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] Materializar cambios dentro de función
Date: 2010-03-13 19:30:44
Message-ID: 3073cc9b1003131130h4a71602dk25983b1a8b0f43f2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2010/3/13 noXat <lista-postgres(at)3f22(dot)com>:
>
> Dada esta estructura tengo una función que crea cada un intervalo de tiempo
> un registro en la tabla padre. Dentro de este intervalo se tiene que poder
> crear múltiples registros dentro de la tabla hija con la la fk de la tabla
> padre desde afuera de la función.
> El problema es que mientras está ejecutándose la función que crea la tabla
> padre no puedo ver los datos que han sido creados por la función ya que no
> ha terminado.
> Se que no se puede hacer un commit dentro de una función.
>
> ¿Existe alguna manera que se puedan materializar los cambios realizados
> (Entiéndase el INSERT INTO) antes que termine la función y que si termina no
> se haga un rollback?
>

Segun entendi tienes una funcion que se ejecuta indefinidamente, cada
60 segundos inserta un registro en una tabla padre y luego duerme
hasta que dentro de 60s vuelve a insertar un registro en la tabla
padre... mientras tanto un proceso X externo a la funcion trata de
crear registros en base a los registros padres que estas creando...

antes que nada parece un diseño bastante malo, porque haces esto?

en todo caso en lugar de tener una funcion (es decir, una sola
transaccion larguisima cuyos cambios NO vas a ver hasta que la funcion
termine) que duerma 60 segundos crea una funcion que haga el insert y
pon la en un cron para que se ejecute cada minuto

o si quieres mantener la idea de la funcion usa dblink para desde la
funcion crear una nueva conexion a la base de datos (seria algo como
una transaccion autonoma)

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. +59387171157

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-03-14 14:47:12 Re: Materializar cambios dentro de función
Previous Message noXat 2010-03-13 19:13:58 Ejemplo funcional