Re: query asincronico y SPI

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
Cc: Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: query asincronico y SPI
Date: 2005-09-23 18:40:08
Message-ID: 20050923184008.GB8580@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Fri, Sep 23, 2005 at 02:03:58PM -0400, Mario Soto Cordones - Venezuela wrote:

> Tengo una vista materializada que me actualiza una tabla de
> referencias cruzadas, esto me funciona muy bien y me aliviana muchos
> procesos de busquedas de registros en una tabla de mas de 4 millones
> de registros, el problema actual que tengo es que al gatillar el query
> que me actualiza la vista materializada despues de la insercion de un
> registro, la aplicacion cliente queda tomada hasta que el servidor
> termina de actualizar la vista,. Por eso busque informacion y encontre
> que con libpq puedo tener querys asincronicos, pero libpq no me sirve
> ya que mi aplizacion en windows utiliza psqlodbc, es por eso que
> disene una funcion en lenguaje C con SPI y al gatillar el query pero a
> la funcion que se llama actualiza.so, es resultado es el mismo.

Entiendo. No, no puedes hacerlo con SPI, ni de ninguna otra forma en
realidad, en esencia porque el "backend" no es multithread, y por lo
tanto no puede quedar procesando la peticion de actualizacion y ademas
seguir con el resto del procesamiento para el cliente.

No desesperes eso si -- hay un mecanismo que me parece que es casi
perfecto para lo que quieres; se trata de LISTEN/NOTIFY. La idea seria
que el proceso que haga el trabajo de regeneracion de la vista
materializada sea independiente de los que atienden a los clientes.
Esto proceso debe hacer un LISTEN, y los procesos que modifiquen las
tablas involucradas deben invocar a NOTIFY en un trigger. Entonces
cuando se haga una modificacion, la notificacion despertara al proceso
que reconstruye la vista, y este trabajara fuera de linea.

Espero haberme explicado. Ojala te sirva este mecanismo; realmente es
muy sencillo.

--
Alvaro Herrera http://www.advogato.org/person/alvherre
www.google.com: interfaz de línea de comando para la web.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Miranda 2005-09-23 18:57:36 Re: Otra ves con los arrays
Previous Message Mario Soto Cordones - Venezuela 2005-09-23 18:03:58 Re: query asincronico y SPI