Вы можете определенно сделать это изначально. Если вы идете по этому маршруту, я бы использовал функцию Postgres COPY вместе с временной таблицей в вашем запросе, отменив временную таблицу, когда закончите. Если я не ошибаюсь, это потребует, чтобы ваш файл присутствовал в папке, в которой находится Postgres, например, папке с данными, где бы вы ни устанавливали Postgres.
Однако, для более чистого вида, я бы предпочел использовать PL/R для чего-то вроде этого. Вы можете быстро прочитать из файла и вернуть массив значений, которые будут использоваться в вашем запросе. Я уверен, что вы можете заменить PL/R PL/PYTHON или другим, что вы предпочитаете, имея методы доступа к внешним файлам.
CREATE FUNCTION file_vals()
RETURNS integer[] AS
$BODY$
return (readLines('C:/path/to/your/file.txt'))
$BODY$
LANGUAGE plr IMMUTABLE;
Ваш file.txt выглядит следующим образом:
555
123
567
Затем вызовите из вашей функции (я ставлю выборочные данные в подзапроса для упрощения):
WITH users AS(
SELECT 123 AS userID
)
SELECT userID
FROM users
WHERE userID = ANY(file_vals())
Edit: Как указано DanielVérité в комментариях важно отметить, что это работает только в том случае, если у вас есть права администратора по вашей базе данных. PL/R и любое другое языковое расширение, которое дает вам внешний доступ к файлам, по своей сути является ненадежным языком, а это означает, что только администраторы могут создавать функции на этих языках.
Также важно отметить, что файл, который вы читаете, должен быть доступен непосредственно с сервера Postgres. Если вы выполняете эти запросы через удаленный клиент, вам нужно сначала передать этот файл на сервер.
Нет, это невозможно. Сначала вам нужно импортировать файл в (временную) таблицу. Альтернативой является определение внешней оболочки данных, которая позволяет вам обращаться к файлу в виде таблицы (но тогда файл должен находиться на ** сервере **, где работает Postgres). –