猿问

PHP postgresql pg_copy_from

我有大约 20 万行要导入 Postgresql 数据库。我发现我应该使用pg_copy_from函数。我试过了,但它应该返回true或false返回null。当然,它不会在 db 中插入任何内容。


pg_copy_from($this->connection, $table, $data);

我也试过替代 pg_put_line


    pg_query($this->connection, "copy $table from stdin");

    foreach ($data as $row) {

        pg_put_line($this->connection, implode('\t', $row));

    }

    pg_put_line($this->connection, "\\.\n");

    pg_end_copy($this->connection);

它没有帮助。它不会抛出任何错误,我不知道是什么问题。你知道它为什么返回null或如何解决这个问题吗?


编辑:我的行看起来像这样


2019-04-01\t8\t3\tH\tA\t0021\t\\N\t\\N\t\\N\t\\N\t15\t\\N\t0\t0\t0\t0

我有 16 列......我可以使用 pdo 查询插入相同的数据


当年话下
浏览 151回答 1
1回答

繁花如伊

我建议您使用 PostgreSQL 工具而不是 PHP,因为在我看来,您的主要目标是“我有大约 20 万行要导入 Postgresql 数据库”。而不是 PHP pg_copy_from() 函数...所以,我的建议是,pg_dump在终端上运行一个命令,然后在终端上使用该psql命令导入您的数据。例子:$&nbsp;pg_dump&nbsp;-U&nbsp;postgres&nbsp;-f&nbsp;mydump.sql&nbsp;-t&nbsp;mytable&nbsp;mydatabase然后导入运行:$psql&nbsp;-U&nbsp;postgres&nbsp;mydatabase&nbsp;<&nbsp;mydump.sql最终,我们遇到了一个具有奇怪行为的 PHP 函数,我记得有一次我试图使用 pg_insert() 函数,我相信它带有通配符(?或 $ 我现在不确定)但它没有用,所以我放弃并使用 pg_query() 函数代替。也许你也有类似的问题。
随时随地看视频慕课网APP
我要回答