Re: Commit incremental

From: Jose Maria Mencia <jmencia(at)alimarket(dot)es>
To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
Cc: POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Commit incremental
Date: 2013-08-30 12:08:54
Message-ID: 1377864534.11607.19.camel@jmencia.alimarket.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

A ver si lo he entendido bien. ¿Se te refieres a un esquema cómo el
siguiente?

CREATE FUNCTION funcion_update (cliente integer) RETURNS integer AS
$BODY$
DECLARE
BEGIN
-- operaciones de actualizacion sobre el cliente
END;
$BODY$

/*********************************************************************************************/

CREATE FUNCTION funcion_recorrido() RETURNS void AS
$BODY$
DECLARE
BEGIN
FOR cursor IN ( select cliente from mis_clientes )
LOOP
SELECT * FROM dblink('conexion', 'select
funcion_update(cursor.cliente)') .....;
-- si la llamada anterior ha ido bien, se produce el commit por
cliente
END LOOP;
END;
$BODY$

El vie, 30-08-2013 a las 06:45 -0500, Jaime Casanova escribió:
> 2013/8/30 Jose Maria Mencia <jmencia(at)alimarket(dot)es>:
> > Buenos días a todos desde Madrid,
> > les planteo mi siguiente problema: he codificado una funcion pl/pgsql
> > que realiza diversos cambios sobre un cliente determinado (en diversas
> > tablas). Tengo que ejecutarla para miles de clientes pero quisiera
> > gestionar la transacción por cada uno de ellos de modo que si el proceso
> > falla en alguno, los cambios sobre los anteriores se hayan efectuado. Si
> > los proceso todos en una única función la transacción es sólo una y
> > pierdo la posibilidad del commit individual.
> > ¿Cómo puedo resolverlo? Sólo se me ocurre llamar a esta función en un
> > bucle para cada uno de los clientes desde un proceso externo a la BD
> > escrito en cualquier lenguaje de programación con el que pueda conectar
> > a postgres.
> >
> > ¿Alguna solución más apropiada que no implique código externo al motor
> > de postgres?
> >
>
> Llama a esa función usando dblink. Al usar dblink, cada llamada ocurrirá dentro
> de su propia transacción.
>
> http://www.postgresql.org/docs/9.2/static/dblink.html
>

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2013-08-30 12:19:22 Re: Commit incremental
Previous Message Jaime Casanova 2013-08-30 11:45:14 Re: Commit incremental