2014-10-28 66 views
0

我有以下兩個文件,第一個是數據文件,第一列是行的唯一標識符,第二列表示id字段後面的字段字典。從文件中將數據加載到Postgres中

> cat data 
1,NULL,37,M,NULL 
2,NULL,25,F,NULL 
3,NULL,42,F,NULL 
4,NULL,18,M,NULL 

> cat .dictionary 
0,balance|double 
1,age|int 
2,gender|string 
3,state|string 

數據文件的大小可能非常大。

如何將這些數據導入Postgres?我應該編寫自己的自定義數據加載程序來分析這些文件並創建一個可以使用的.sql文件嗎?或者通過JDBC直接連接到數據庫並以這種方式加載?

+0

使用副本:http://www.postgresql.org/docs/9.2/static/sql-copy.html。 – 2014-10-28 01:03:18

回答

1

創建表來保存這些數據,然後使用COPY

create table Table1 
(
balance double precision, 
age  int, 
gender varchar(10), 
state varchar(10) 
); 

COPY Table1 FROM '/home/abc/data.txt' DELIMITER ',' CSV; 
+0

好吧,這可能會工作 - 我想盡管編程 - 即。我不希望這是一個手動過程。我猜它可以以某種方式編寫腳本? – jcm 2014-10-28 03:32:02

0

正如@雷達的答案的一個變種,在創建表後,在PSQL\copy命令可以使用。它包裝COPY,但在爲本地文件系統(即您的計算機)提供所需權限方面提供了一些優勢,而不是服務器,您可能不一定具有所需的權限。

它可能比服務器端COPY慢,因爲它不是純粹的服務器端,但它是我通常在我需要做這種事情時使用的方法,並且我發現性能通常很好。

作爲一個相關的問題,我發現當複製這樣的數據時,性能問題的最大原因是表上的索引和約束。如果你正在複製一個已經存在的表,並且它有很多數據,我會建議刪除它們,複製它們,然後再重新應用它們。對於新表,請等到複製後創建任何索引或約束。差別可以是數量級。

有關\copy的更多詳細信息,請參閱psql doc

相關問題