小编典典

检查Postgres表中是否存在记录

sql

我必须每20秒阅读一次CSV。每个CSV都包含最小值。500至最大
60000行。我必须将数据插入Postgres表中,但是在此之前,我需要检查是否已插入项目,因为很有可能会获得重复的项目。检查唯一性的字段也已建立索引。

因此,我分块读取文件,并使用IN子句获取数据库中已有的项目。

有更好的方法吗?


阅读 213

收藏
2021-03-23

共1个答案

小编典典

这应该表现良好:

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
2021-03-23