删除Postgres中文本文件中指定的表的行

时间:2011-10-05 09:11:59

标签: sql postgresql file-io postgresql-copy

我有一个文本文件,其中包含应该在我的表中删除的行的行号,如下所示:

3
32
40
55
[...]

如何获得PostgreSQL兼容的SQL语句,该语句使用文本文件从表中删除这些行?

2 个答案:

答案 0 :(得分:6)

执行一次可能如下所示:

CREATE TEMP TABLE tmp_x (nr int);

COPY tmp_x FROM '/absolute/path/to/file';

DELETE FROM mytable d
 USING tmp_x
 WHERE d.mycol = tmp_x.nr;

DROP TABLE tmp_x;

重复使用时,将其包装为plpgsql function,文件路径/表名/列名作为参数。如果表格或列名称是动态的,则必须使用EXECUTE作为DELETE

答案 1 :(得分:0)

我的解决方案与 Erwin 的略有不同。我会使用 IN,因为执行 JOIN (USING) 会增加查询将处理的行数。

CREATE TEMP TABLE tmp_x (nr int);

COPY tmp_x FROM '/absolute/path/to/file';

DELETE FROM mytable d
 WHERE d.mycol IN (SELECT nr FROM tmp_x);

DROP TABLE tmp_x;