Estou importando um grande número de arquivos grandes para um número de tabelas a serem particionadas usando loops dentro de um bloco 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 esse processo deve levar cerca de 15 horas e espero que todas as importações não sejam revertidas se houver um erro de importação em algum momento.
O IIRC COMMIT
não funciona nas funções armazenadas, pois a função inteira é tratada como uma única transação.
A partir da documentação para$do$
O bloco de código é tratado como se fosse o corpo de uma função sem parâmetros, retornando nulo. É analisado e executado uma única vez.
Estou assumindo que isso significa que toda a $do$
transação é uma e, portanto, as confirmações dentro do bloco não funcionarão. Estou correcto?
BEGIN
ouCOMMIT
no corpo da função. Você receberá uma exceção, porque isso não é permitido (não é possível).