익명의 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$
코드 블록은 매개 변수가없는 함수의 본문 인 것처럼 처리되어 void를 반환합니다. 한 번만 구문 분석되고 실행됩니다.
나는 이것이 전체 $do$
가 하나의 트랜잭션이므로 블록 내에서 커밋이 작동하지 않는다는 것을 의미한다고 가정합니다 . 제가 맞습니까?
BEGIN
또는COMMIT
함수 본문에서 시도하십시오 . 허용되지 않기 때문에 예외가 발생합니다 (불가능).