簡體   English   中英

postgresql / psql查詢,其中子句多個“或”從文件中讀取

[英]postgresql/psql query where clause multiple “or” read from file

抱歉,之前是否有人問過類似的問題(我進行了搜索,但找不到任何有用的信息)。

我有一張桌子,上面有數據傳輸的詳細信息。 字段之一是與傳輸關聯的IP。 我需要開發一個查詢,該查詢將使我獲得表中與79個IP之一匹配的記錄的子集(表中有608個不同的IP)。 我有一個文件,其中的必需IP由換行符分隔。 有沒有一種方法可以開發一個查詢來讀取此IP文件以獲得所需的記錄,而不是由我手動輸入每個用“或”分隔的IP?

如果數據庫或客戶端中的IP文本用換行符分隔,則此查詢將完成此任務:

將列表轉換為數組,取消嵌套並加入主表:

SELECT *
FROM  (SELECT unnest(string_to_array(your_list_of_ips, E'\n')) AS ip) sub
JOIN  data_transfers d USING (ip);

有關使用的功能的更多信息,請參見此處的手冊。

SQL COPY

要直接從文件導入,可以使用COPY 數據文件必須與Postgres在同一台計算機上,並且您需要為此數據庫超級用戶。

這次我們已經每行有一個IP:

CREATE TEMP TABLE tmp(ip text);

COPY tmp FROM '/path/to/file';

SELECT *
FROM  tmp
JOIN  data_transfers d USING (ip);

psql \\copy

如果您的文件位於另一台計算機上,或者您沒有超級用戶特權,請改用(主要是)等效的\\copy sql pcopy。 要從bash中進行操作(如評論中的要求):

psql dbname

dbname=# \set ips `cat ips.txt`

dbname=# SELECT *
dbname-# FROM  (SELECT unnest(string_to_array(:'ips', E'\n')) AS ip) sub
dbname-# JOIN  data_transfers d USING (ip);

\\set是psql元命令,用於設置變量-在這種情況下為文件的內容。
ips.txt是您的IP地址文件。
:'ips'是單引號SQL插值的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM