将大型Excel文件导入到具有父项的多个可选依赖项的postgres

时间:2015-04-15 05:09:36

标签: php postgresql postgresql-9.3

我在应用程序中使用Postgres 9.3和PHP。

我想将大型Excell文件导入到具有父表的多个可选依赖项的postgres中(基本上我必须检查这些父项是否存在行)。

我已经使用php for循环完成了它,但它似乎很慢。所以我必须在数据库层中提供postgres函数的解决方案。

有人能告诉我怎样才能将php数组发送到postgres函数并在postgres函数中遍历数组,在循环中实现业务规则 将单个行插入表中。

1 个答案:

答案 0 :(得分:0)

批量加载到PostgreSQL的最快速接口是COPY API。使用此API,您将发送到由所选分隔符分隔的值的PostgreSQL数据块(以字符串形式)。这种方法非常快。您可以将父表加载到哈希表(检查应该很快),并且检查的数据可以发送到Postgres。

我正在寻找PHP手册 - 有函数pg_copy_from,但在PHP中使用大型数组可能因内存使用而变得困难(但它非常简单)。有点困难,但没有高内存要求是函数pg_put_line

<?php 
    $conn = pg_pconnect ("dbname=foo");
    pg_query($conn, "CREATE TABLE bar (a int4, b char(16), d float8)");
    pg_query($conn, "COPY bar FROM stdin");
    pg_put_line($conn, "3\thello world\t4.5\n");
    pg_put_line($conn, "4\tgoodbye world\t7.11\n");
    pg_put_line($conn, "\\.\n");
    pg_end_copy($conn);
?>