Я імпортую велику кількість великих файлів у ряд таблиць, які повинні бути розділені за допомогою циклів у блоці анонімного коду plpgsql $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
Весь цей процес повинен зайняти близько 15 годин, і я сподіваюся, що весь імпорт не буде відмовлений, якщо в якийсь момент буде помилка імпорту.
IIRC COMMIT
не працює в межах збережених функцій bc, вся функція трактується як одна транзакція.
Блок коду трактується так, ніби він є тілом функції без параметрів, повертаючи порожнечу. Він розбирається і виконується одноразово.
Я припускаю, що це означає, що вся $do$
операція - це одна транзакція, і тому коміти в блоці не будуть працювати. Я прав?
BEGIN
абоCOMMIT
у функції функції. Ви отримаєте виняток, тому що це не дозволено (неможливо).