Problema con commits y rollbacks

From: LEONARDO GARCIA <garcialmx(at)pdvsa(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Problema con commits y rollbacks
Date: 2007-04-27 19:29:46
Message-ID: OF366994A9.9023FA2B-ON042572CA.00685C22-042572CA.006B1845@pdvsa.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Hola a todos y Buenas Tardes.

Actualmente estoy investigando sobre los commits en funciones de postgres
y he encontrado algunos problemas, me gustaría contar con alguna manera de
realizar commit dentro de funciones plpgsql pero no lo he logrado, según
he leido en los archivos de la lista ésto no es posible.

Me gustaría saber si alguno me puede dar una sugerencia para abordar este
problema, tengo una función que realiza el llenado de una tabla y requiero
que el mismo si es interrunpido por alguna causa sea guardado en la tabla
hasta donde pudo llegar sin hacer rollback de la transacción.

He estado probando algunas variaciones del siguiente script:

CREATE TABLE prueba
(
numero numeric(10) NOT NULL DEFAULT 0,
"Descripcion" varchar(40),
CONSTRAINT prueba_pk PRIMARY KEY (numero)
)
WITHOUT OIDS;

CREATE OR REPLACE FUNCTION llena_prueba(comienza bool)
RETURNS text AS
$BODY$
DECLARE
ultimo numeric;
BEGIN
ultimo=0;
SET search_path = public, pg_catalog;
SELECT COALESCE(MAX(prueba.numero),1) INTO ultimo from prueba;
FOR i IN ultimo..10000000 LOOP
BEGIN
INSERT INTO prueba values(i,'PRUEBA '||i);
EXCEPTION WHEN others THEN
-- NADA
RETURN 'termino';
END;
IF MOD(i,100)=0 THEN
RAISE NOTICE 'INSERTADOS %',i;
END IF;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Luego invoco la función con:

select llena_prueba(true);

Esta función está programada para conseguir el último valor insertado en
la tabla y continuar con el próximo hasta llegar a 10 millones de filas.
El problema es que si cancelo la ejecución del script luego de haber
insertado unos cientos de filas, se realiza automáticamente el rollback y
no se conservan las filas ya insertadas,
¿Sabe alguno de Uds. como podría lograr conservar los cambios aunque se
cancele la ejecución?
Agradezco cualquier sugerencia.

Agradeciendo de antemano su excelente ayuda se despide.

Atte.

Leonardo García.
Los Teques-Venezuela.

*************** PDVSA´S INTERNET E-MAIL USE ***************
This message may contain information solely of the interest of PDVSA or
its businesses. Copying, distribution, disclosure or any use of the
information contained in this transmission is permitted only to
authorized parties. If you have received this e-mail by error, please
destroy it and notify webmaster(at)pdvsa(dot)com or the sender by reply email.

****** USO DEL CORREO ELECTRONICO DE PDVSA HACIA INTERNET ******
Esta nota puede contener informacion de interes solo para PDVSA o sus
negocios. Solo esta permitida su copia, distribucion o uso a personas
autorizadas. Si recibio esta nota por error, por favor destruyala y
notifique al remitente o a webmaster(at)pdvsa(dot)com(dot)

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Herberth Lagos 2007-04-27 19:40:41 Sistema de Fotografías
Previous Message Alvaro Herrera 2007-04-27 19:06:45 Re: updates