2016-04-11 89 views
0

我創建了一個名爲Markers的表。以下是.sql文件。使用WHERE子句查詢PostgreSQL

CREATE TABLE markers (
    id SERIAL PRIMARY KEY , 
    ip_address varchar(25), 
    Hostname varchar(255), 
    Continent varchar(255), 
    Country varchar(255), 
    Capital varchar(255), 
    State varchar (255), 
    City_Location varchar(255) 
); 

我有一個包含IP地址的文本文件。該文件看起來像這樣。

8.8.8.8 
23.64.0.0 
31.0.0.0 
50.22.0.0 
54.244.0.0 
54.72.0.0 
54.80.0.0 

屬於每個IP地址的信息存儲在表中。 如果我想收集數據的IP 8.8.8.8,我可以寫一個這樣的查詢

SELECT * FROM markers WHERE ip_address='8.8.8.8'; 

,同樣我能爲其他IP做。但是這是非常耗時的,因爲我必須爲每個IP地址寫一個查詢。

相反,有沒有什麼方法可以從文本文件中讀取IP地址,並在一次性執行所有IP地址的查詢?

任何幫助,這將不勝感激。謝謝。

+0

你不能做到這一點與Postgres的孤獨。只需編寫一個腳本(以您喜歡的任何語言),即可讀取該文件並執行查詢。 – freakish

+2

不回答這個問題,但您可能對http://www.postgresql.org/docs/9.1/static/datatype-net-types.html感興趣 – Mihai

+0

@freakish我正在使用BASH腳本。 BASH有可能嗎?或者我應該去用PHP? –

回答

1

您可以使用它的psql併發出以下命令(可根據個人具體情況,在閱讀PG手冊「COPY FROM」)做:

create temp table ip_addresses (ip_address text); 
copy ip_addresses from stdin csv; -- pipe your text file here 
select * from markers where ip_address in (select * from ip_addresses); 
+0

我可以在不使用文本文件的情況下執行此操作嗎? –

+0

我想出瞭如何在不使用文本文件的情況下做到這一點。我用這個'copy ip_addresses from PROGRAM'#your commands';'替換了第二行代碼 –