使用INSERT INTO进行ascii /外部文件?

时间:2012-03-29 17:22:44

标签: sql postgresql relational-database

  

可能重复:
  Bulk Insert of hundreds of millions of records

所以我只是想知道是否有可能使用INSERT INTO,比如一个700k行外部ascii文件到已经创建的表中并且其中包含现有数据? Al值是相同的,只是我的一位同事告诉我使用该命令而不是COPY。这个评论是假的吗?

提前致谢。

PS:我正在使用PosgtreSQL / PGAdmin III

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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语句。