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

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

3
32
40
55
[...]

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


person ptikobj    schedule 05.10.2011    source источник
comment
может быть полезная ссылка: stackoverflow.com/questions/3959692/rownum-in-postgresql HTH.   -  person Thinhbk    schedule 05.10.2011
comment
Вы имеете в виду, что хотите выполнить удаление автоматически для такого текстового файла, или вам просто нужно сделать это один раз?   -  person Hugh Jones    schedule 05.10.2011


Ответы (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 с путем к файлу / имя таблицы/имя столбца в качестве параметров. Если имя таблицы или столбца является динамическим, вы должны использовать ВЫПОЛНИТЬ для файла DELETE.

person Erwin Brandstetter    schedule 05.10.2011

У меня немного другое решение, чем у Эрвина. Я бы использовал 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;
person Ulises    schedule 02.05.2021