Удалить строки таблицы, указанной в текстовом файле в 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;