所以我只是想知道是否有可能使用INSERT INTO,比如一个700k行外部ascii文件到已经创建的表中并且其中包含现有数据? Al值是相同的,只是我的一位同事告诉我使用该命令而不是COPY。这个评论是假的吗?
提前致谢。
PS:我正在使用PosgtreSQL / PGAdmin III
答案 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
语句。