2012-07-05 33 views
0

我想将测试数据加载到我的postgresql数据库中的表中。将CSV导入到postgresql(Zend/PHP)

我正在做我的单元测试课内。

$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' 

"); 

我得到一个语法错误。

回答

1

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

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

+0

感谢您的提示!我几乎使用这里的代码工作:http://php.net/manual/en/function.pg-put-line.php但由于某种原因,COPY不识别我的列和行分隔符(\ t和\ n)。我通过将其更改为'|'来解决列分隔符问题,但我无法提供超过1行的数据。你有什么建议吗? – crazyphoton 2012-07-06 10:08:44

+0

你能提供一个简单的例子来说明问题吗? – 2012-07-06 10:47:01

+0

http://pastebin.com/srwFLdut 它不识别\ n所以我不能插入超过1行。 – crazyphoton 2012-07-09 09:37:22