我有一个文本文件,其中包含应该在我的表中删除的行的行号,如下所示:
3
32
40
55
[...]
如何获得与 PostgreSQL 兼容的 SQL 语句,该语句使用文本文件从表中删除这些行中的每一行?
我有一个文本文件,其中包含应该在我的表中删除的行的行号,如下所示:
3
32
40
55
[...]
如何获得与 PostgreSQL 兼容的 SQL 语句,该语句使用文本文件从表中删除这些行中的每一行?
这样做一次可能看起来像这样:
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函数。如果表名或列名是动态的,则必须对DELETE
.
我的解决方案与 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;