使用.csv将数据导入PostgreSQL时出现问题(csv中大于5万行)

时间:2018-12-19 07:10:30

标签: php postgresql

我收到错误:

  

此页面无法正常工作,没有发送任何数据。   ERR_EMPTY_RESPONSE

我正在使用PHP语言读取csv文件。

我的PHP方法看起来像用于处理csv数据:

$csvAsArray = array_map('str_getcsv', file($tmpName));

我确信上面的代码创建问题后,代码没有得到执行。 我如何一次可以导入大于至少一百万个数据? 谁能帮我,我应该选择哪种方法?

2 个答案:

答案 0 :(得分:0)

您似乎正试图一次吞并文件的全部内容。不要那样做:) PHP array_map()不能扩展到1000行或数百万行。

建议:

  1. 将数据读取到临时文件中(就像您现在正在做的那样)。

  2. 执行Postgresql COPY

示例:

COPY my_table(my_columns, ...) 
FROM 'my_file.csv' DELIMITER ',' CSV HEADER;

答案 1 :(得分:0)

我建议使用league/csv软件包进行CSV解析和导入。 @ paulsm4是正确的,它永远不需要将整个文件放入内存中然后使用它,而是应该逐行读取。但是,此程序包维护良好,可以在后台有效地完成所有操作。在我看来,它比COPY postgres命令要灵活得多。一个人可以过滤内容,将回调映射到字段/行,所有这些都在PHP方面。