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