你一定能做到這一點本身。如果要走這條路線,我會在查詢中使用Postgres COPY函數以及臨時表,並在完成時放棄臨時表。如果我沒有弄錯,這將要求您的文件存在於Postgres可以控制的文件夾內,例如您的數據文件夾,無論您安裝了Postgres。
但是,爲了一個更清潔的外觀,我寧願僱用PL/R這樣的東西。您可以快速從文件中讀取數據,並返回要在您的查詢中使用的值數組。我相信你可以用PL/PYTHON或其他任何你喜歡的方法來替代PL/R來訪問外部文件。
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())
編輯:DanielVérité指出在評論中,重要的是要注意,這隻有在您對數據庫擁有管理員權限時纔有效。 PL/R和任何其他允許外部文件訪問的語言擴展本身就是一種不可信的語言,這意味着只有管理員才能使用這些語言創建功能。
重要的是要注意,您正在閱讀的文件必須可以直接從Postgres服務器訪問。如果您通過遠程客戶端執行這些查詢,則需要先將該文件傳送到服務器。
不,這是不可能的。您需要先將文件導入(臨時)表中。另一種方法是定義一個外部數據包裝器,它允許您以文件的形式訪問該文件(但該文件需要在運行Postgres的**服務器**上) –