我必须每20秒阅读一次CSV。每个CSV都包含最小值。500至最大 60000行。我必须将数据插入Postgres表中,但是在此之前,我需要检查是否已插入项目,因为很有可能会获得重复的项目。检查唯一性的字段也已建立索引。
因此,我分块读取文件,并使用IN子句获取数据库中已有的项目。
有更好的方法吗?
这应该表现良好:
CREATE TEMP TABLE tmp AS SELECT * FROM tbl LIMIT 0 -- copy layout, but no data COPY tmp FROM '/absolute/path/to/file' FORMAT csv; INSERT INTO tbl SELECT tmp.* FROM tmp LEFT JOIN tbl USING (tbl_id) WHERE tbl.tbl_id IS NULL; DROP TABLE tmp; -- else dropped at end of session automatically