Удалить строки таблицы, указанной в текстовом файле в Postgres

У меня есть текстовый файл, содержащий номера строк, которые должны быть удалены в моей таблице следующим образом:

3
32
40
55
[...]

Как получить SQL-оператор, совместимый с PostgreSQL, который удаляет каждую из этих строк из моей таблицы, используя текстовый файл?

2 ответа

Решение

Выполнение этого может выглядеть так:

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, указав в качестве параметров путь к файлу / имя таблицы / имя столбца. Если имя таблицы или столбца является динамическим, вы должны использовать EXECUTE для DELETE,

У меня есть несколько иное решение, чем у Эрвина. я хотел бы использовать 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;
Другие вопросы по тегам