【问题标题】:Problems while importing a txt file into postgres using php使用php将txt文件导入postgres时出现问题
【发布时间】:2012-01-15 10:40:02
【问题描述】:

我正在尝试使用“\copy”命令将 txt/csv 文件从 php 导入我的 postgres 数据库。我不能使用 COPY 代替 \copy,因为我需要它作为 psql 客户端执行。我的代码是:

$query = '\\'.'copy data1 FROM "data1.txt" WITH CSV HEADER DELIMITER AS "," QUOTE AS "^"';

$result = pg_query($conn,$query);
if (!$result) {
  echo "cannot copy data\n";
} else {
  echo "SUCCESS!";
}

当我运行这个 php 文件时,我得到这个错误:

PHP Warning:  pg_query(): Query failed: ERROR:  syntax error at or near "\"
LINE 1: \copy data1 FROM "data1.txt" WITH ...
    ^ in script.php on line 30

【问题讨论】:

  • 我不知道 pgsql,所以不能真正帮助你,但我只是将它导入到 sqlite,然后 sql 结束

标签: php postgresql file-io postgresql-copy


【解决方案1】:

实际上,您无法通过pg_query() 运行\copy。它不是 SQL 命令。它是psql client 的元命令。

你可以在那里执行:

\copy data1 FROM 'data1.txt' WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'

或者运行shell命令:

psql mydb -c "\copy data1 FROM 'data1.txt'
                WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'"

注意引号。值必须是 single-quoted in PostgreSQL: 'value'
双引号用于标识符——实际上只有大写或非法字符的标识符或保留字才需要:"My table"

【讨论】:

  • 感谢 Erwin,我尝试以超级用户身份进行复制(使用 COPY)并且成功了!
  • COPY和\COPY有什么区别?
  • @Tim: COPY 是 SQL 命令,在服务器上运行。 \copy 是包装 COPY 以供客户端使用的 psql 命令(方便本地文件)。
【解决方案2】:

我遇到了同样的问题,但是没有使用原始的psql\copy 命令,而是决定使用Ecto.Adapters.SQL.stream/2 函数来读取文件的内容,而Repo.transaction/1 执行正常的SQL @ 987654326@ 命令从STDIN 中获取由流提供的数据,如this blog 中所述。我还没有测试过它的性能,但我认为这将是对这个答案的一个很好的补充。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多