Skip site navigation (1) Skip section navigation (2)

Problema con commits y rollbacks en funciones

From: Leonardo Garcia <go2leonardo(at)yahoo(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Problema con commits y rollbacks en funciones
Date: 2007-04-28 00:02:38
Message-ID: 703152.42497.qm@web38807.mail.mud.yahoo.com (view raw or flat)
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 interrumpido 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.
 __________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
Regístrate ya - http://correo.espanol.yahoo.com/ 

Responses

pgsql-es-ayuda by date

Next:From: usuario anonimoDate: 2007-04-28 01:20:11
Subject: Re: postgresql-common con 8.2.4
Previous:From: Alejandro GascaDate: 2007-04-27 23:12:30
Subject: postgresql-common con 8.2.4

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group