将大型 CSV 加载到 Postgres 中

将大型 CSV 加载到 Postgres 中

我正在尝试通过以下方式将大约 100M 条记录(磁盘上大约 8GB)的 CSV 加载到 Postgres 中:复制命令:copy mytable from 'path/to/myfile.csv' with CSV;我一直在通过检查 pgAdmin 中报告的表大小并将其与 CSV 大小进行比较来监控进度。我知道这充其量只是一个松散的比较,我很想知道是否有更好的方法来监控进度。

问题在于:这个加载过程已经持续了很长时间(我认为太长了),当我不断检查表大小时,加载速度似乎在减慢。也就是说,现在加载新的 100MB 数据所花的时间比加载之前要长得多。为什么?

除了将 CSV 分成许多较小的文件之外,还有什么可以调整、配置或采取其他方法来加快加载速度吗?


更新:架构/数据细节

一个代表性数据行:

1234567890,FOOBARF,2010-01-15 03:07:05,0.924700,0.925000

完整的架构定义:

CREATE TABLE mytable
(
  id integer NOT NULL,
  rname character varying(7) NOT NULL,
  ts timestamp without time zone NOT NULL,
  stat1 numeric NOT NULL,
  stat2 numeric NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE mytable OWNER TO postgres;

答案1

如果您可以禁用索引,您可能会更幸运。但这不是一个好的答案,因为您没有提供有关表的足够信息。

请发布表定义、约束、索引!!!和触发器。

另外,您是否确定 CSV 数据正确且与您的表格相符?

相关内容