可能重複:
Bulk Insert of hundreds of millions of records將INSERT INTO用於ascii/external文件?
所以我只是想知道,如果它是可以使用INSERT INTO了,說70萬行外部ASCII文件到一個已經創建並與表現有的數據呢? Al值相同,只是我的一位同事告訴我使用該命令而不是COPY。這個評論是否爲假?
在此先感謝。
PS:我使用PosgtreSQL/pgAdmin的III
可能重複:
Bulk Insert of hundreds of millions of records將INSERT INTO用於ascii/external文件?
所以我只是想知道,如果它是可以使用INSERT INTO了,說70萬行外部ASCII文件到一個已經創建並與表現有的數據呢? Al值相同,只是我的一位同事告訴我使用該命令而不是COPY。這個評論是否爲假?
在此先感謝。
PS:我使用PosgtreSQL/pgAdmin的III
您也可以使用外部數據封裝映射你的文本文件作爲表:
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;
謝謝!這有幫助! – 2012-04-03 17:05:46
從技術上講,如果你的文件格式完全一樣:
(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
聲明。
不知道COPY,我只是想這可能會更容易做到這一點編程。 另外,你必須小心你的字段類型。我對Postgre不是很瞭解,但是我知道在mySQL中我遇到了一些問題,我試圖將兆字節的數據保存到TEXT列,但由於數據大小的限制,這些列無法工作。 – ControlAltDel 2012-03-29 17:29:06
如果可能你的意思是編輯文件使其成爲'SQL'腳本文件,那麼是的,這是可能的。你爲什麼要這樣做而不是使用'copy'? – 2012-03-29 17:37:41