Sto importando un gran numero di file di grandi dimensioni in un numero di tabelle da partizionare usando loop all'interno di un blocco di codice plpgsql anonimo $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
L'intero processo dovrebbe richiedere circa 15 ore e spero che tutte le importazioni non vengano ripristinate in caso di errore di importazione a un certo punto.
IIRC COMMITnon funziona con le funzioni memorizzate perché l'intera funzione viene trattata come una singola transazione.
Dalla documentazione per$do$
Il blocco di codice viene trattato come se fosse il corpo di una funzione senza parametri, restituendo vuoto. Viene analizzato ed eseguito una sola volta.
Suppongo che questo significhi che l'intera $do$è una transazione, quindi i commit all'interno del blocco non funzioneranno. Ho ragione?
BEGINoCOMMITnel corpo della funzione. Otterrai un'eccezione, perché ciò non è consentito (non possibile).