我正在尝试使用“\ 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
答案 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
获取数据。我尚未测试此性能,但我认为这将是此答案的不错补充。