2012-03-29 18 views
0

可能重複:
Bulk Insert of hundreds of millions of records將INSERT INTO用於ascii/external文件?

所以我只是想知道,如果它是可以使用INSERT INTO了,說70萬行外部ASCII文件到一個已經創建並與表現有的數據呢? Al值相同,只是我的一位同事告訴我使用該命令而不是COPY。這個評論是否爲假?

在此先感謝。

PS:我使用PosgtreSQL/pgAdmin的III

+0

不知道COPY,我只是想這可能會更容易做到這一點編程。 另外,你必須小心你的字段類型。我對Postgre不是很瞭解,但是我知道在mySQL中我遇到了一些問題,我試圖將兆字節的數據保存到TEXT列,但由於數據大小的限制,這些列無法工作。 – ControlAltDel 2012-03-29 17:29:06

+2

如果可能你的意思是編輯文件使其成爲'SQL'腳本文件,那麼是的,這是可能的。你爲什麼要這樣做而不是使用'copy'? – 2012-03-29 17:37:41

回答

1

您也可以使用外部數據封裝映射你的文本文件作爲表:

http://www.postgresql.org/docs/current/static/file-fdw.html

兩個例子:

http://michael.otacoo.com/postgresql-2/postgresql-playing-with-foreign-data-wrappers-1/
http://www.depesz.com/2011/03/14/waiting-for-9-1-foreign-data-wrapper/

一旦您已映射文本文件到一張表中,你可以做一個

INSERT INTO target_table (col1, col2, col3) 
SELECT col1, col2, col3 
FROM fdw_table; 
+0

謝謝!這有幫助! – 2012-04-03 17:05:46

0

從技術上講,如果你的文件格式完全一樣:

(f1, f2, f3, f4), 

你可以簡單地在前面加上:

INSERT INTO tbs(f1, f2, f3, f4) VALUES 

在年初該文件以;終止所有內容,並嘗試將其作爲單個SQL命令運行。問題在於700k行,我甚至不知道PostgreSQL是否甚至能夠解析這麼久的一個語句。我的錢是,它不會,但你不妨試試。有關更多文檔,請參閱this page

現在,如果你是在不使用COPY彎曲,那麼我會考慮寫一個簡單的Perl或Python腳本,將做到以下幾點:

while(<FILE>) 
{ 
    chomp; 
    @data_fields = split(/<delim>/, $_); 
    $sth->execute(@data_fields); 
} 

哪裏$sth是對數據庫編寫的INSERT聲明。