Hallo,
ich habe eine Funktion, die innerhalb einer Schleife so einige UPDATES auf bestehende Tabellen durchführt.
CREATE OR REPLACE FUNCTION my_function () RETURNS INT AS
$BODY$
DECLARE
[…]
BEGIN
FOR i IN 0…count LOOP
query_string := ‘UPDATE […]’;
EXECUTE query_string;
query_string := ‘UPDATE […]’;
EXECUTE query_string;
query_string := ‘UPDATE […]’;
EXECUTE query_string;
[…]
END LOOP;
RETURN 1 ;
END
$BODY$
LANGUAGE ‘plpgsql’ ;
Die Berechnungen dauern auf meinem Rechner so 3,5 Tage. Bei meinem letzten Durchlauf trat dann leider am Ende der Berechnungen ein von mir nicht abgefangener Fehler auf “ERROR: cannot EXECUTE a null querystring”. Daduch dass die Funktion abgebrochen wurde, wurde KEINES der vorher in der Funktion gelaufenen updates realisiert :-((
Da ich nicht weiss, ob ich jetzt wirklich alle Fehler abgefangen habe, meine Frage:
(i)
gibt es eine Möglichkeit, die Funktion ordnungsgemäß beenden zu lassen, auch wenn irgendein Fehler auftritt, damit die vorangegangenen UPDATES durchgeführt werden können?
(ii)
gibt es eine Möglichkeit der Funktion nach jedem Schleifendurchlauf zu sagen, dass die UPDATES auch ausgeführt werden sollen?
Herzlichen Dank für Eure Hilfe,
dodo