3

我正在尝试使用“\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
4

2 回答 2

9

实际上,您\copy不能通过pg_query(). 它不是 SQL 命令。它是psql客户端的元命令。

在那里你可以执行:

\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 '^'"

注意引号。值需要在 PostgreSQL 中单引号: 'value'
双引号用于标识符 - 只有大写或非法字符的标识符或保留字实际需要:"My table".

于 2012-01-15T11:05:58.180 回答
0

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

于 2020-01-06T15:41:36.183 回答