Estoy importando una gran cantidad de archivos grandes en varias tablas para ser particionadas usando bucles dentro de un bloque de código plpgsql anónimo $do$
.
$do$
BEGIN
FOR yyyy in 2012..2016 THEN
EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$;
END LOOP;
END;
$do$ LANGUAGE plpgsql
Todo este proceso debería tomar alrededor de 15 horas y espero que todas las importaciones no se reviertan si hay un error de importación en algún momento.
IIRC COMMIT
no funciona dentro de las funciones almacenadas porque toda la función se trata como una sola transacción.
De la documentación para$do$
El bloque de código se trata como si fuera el cuerpo de una función sin parámetros, que devuelve nulo. Se analiza y ejecuta una sola vez.
Supongo que esto significa que la totalidad $do$
es una transacción, por lo que las confirmaciones dentro del bloque no funcionarán. ¿Estoy en lo correcto?
BEGIN
oCOMMIT
en el cuerpo de la función. Obtendrá una excepción, porque eso no está permitido (no es posible).