使用php将txt文件导入postgres时出现问题

时间:2012-01-15 10:40:03

标签: php postgresql file-io postgresql-copy

我正在尝试使用“\ copy”命令从php导入txt / csv文件到我的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

2 个答案:

答案 0 :(得分:7)

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

你可以在那里执行:

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

或者运行shell-command:

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

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

答案 1 :(得分:0)

我遇到了同样的问题,但是没有使用原始的psql \copy命令,而是决定使用Ecto.Adapters.SQL.stream/2函数来读取文件的内容,而{{1 }}执行普通的SQL Repo.transaction/1命令,如this blog中所述,从流提供的COPY获取数据。我尚未测试此性能,但我认为这将是此答案的不错补充。