我正在将大量大文件导入到许多表中,这些表将使用匿名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
在功能体内。您将获得一个例外,因为这是不允许的(不可能)。