【问题标题】:Import CSV to postgresql (Zend/PHP)将 CSV 导入 postgresql (Zend/PHP)
【发布时间】:2012-07-05 14:29:06
【问题描述】:

我想将测试数据加载到我的 postgresql 数据库中的表中。

我在我的单元测试类中这样做。

$this->Application_Model_UserMapper->getDbTable()->getAdapter()->query("COPY users FROM '" . APPLICATION_PATH . "/../tests/dbtestdata/users.csv' CSV HEADER NULL AS E'\N'");

我收到一条错误消息,提示我必须是超级用户才能复制到文件和从文件中复制。这是否意味着我需要以 postgres 用户身份登录?我已经读到这可能会导致安全问题,所以我不热衷于这样做。

其他选项似乎是 \COPY,但以下不起作用..

$this->Application_Model_UserMapper->getDbTable()->getAdapter()->query("

  \COPY users FROM '" . APPLICATION_PATH . "/../tests/dbtestdata/users.csv' 
  CSV HEADER NULL AS E'\N'

");

我收到语法错误。

【问题讨论】:

    标签: php postgresql zend-framework postgresql-9.1


    【解决方案1】:

    \copy 由 PostgreSQL 客户端 psql 使用。 SQL 语句 COPY 由用户 Postgres 完成,您的代码需要此用户或其他解决方案。

    我真的很喜欢pg_put_line,然后你可以用 PHP 读取文件并将其流式传输到 PostgreSQL。

    【讨论】:

    • 感谢您的提示!我几乎已经使用这里的代码使它工作了:php.net/manual/en/function.pg-put-line.php 但由于某种原因,COPY 无法识别我的列和行分隔符(分别为 \t 和 \n)。我通过将其更改为“|”解决了列分隔符问题,但我无法提供超过 1 行的数据。你有什么建议吗?
    • pastebin.com/srwFLdut 它无法识别 \n 所以我不能插入超过 1 行。
    • 我通过将 \n 替换为实际的回车键来修复它。知道为什么会发生这种情况吗?是因为我用的是mac吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多