我想知道是否有人遇到过PostgreSQL对单个撇号表示异常的问题?我从linux命令行执行PostgreSQL语句,以便将csv文件中的数据复制到表中。
表已创建,文件位于正确的目录中,具有正确的权限、所有权和名称。
顶部的语法不正确,而底部看起来完全相同的语法是正确的。
--This line errors.
copy nyc_addresses from '/home/postgres/city_of_new_york.csv' WITH (FORMAT CSV, HEADER);
--This line executes successfully.
copy nyc_addresses from '/home/postgres/city_of_new_york.csv' WITH (FORMAT CSV, HEADER);
通过反复试验,我们已经确定了代码顶部的第一个撇号是问题所在,但无法弄清楚原因。
如果有帮助,则显示的错误为:
/home/postgres/city_of_new_york.csv: No such file or directory
有人能解释一下这可能是什么原因吗?
PostgreSQL的COPY
csv文件的替代方案是cat
,并将它们管道传输到COPY
命令FROM STDIN
。无论数据库是安装在本地还是安装在远程服务器中,这种方法都有效。
$ cat file.csv | psql -U user -d db -c "COPY table FROM STDIN CSV HEADER"
EDIT:正如Nick Barnes所指出的(见评论(,cat
显然需要与copy
具有相同的权限,这并不能解决神秘的OP问题。
@Jetchill提出了以下替代方案,其效果与cat
相同,但对一些用户来说可能更直观:
psql -U user -d db -c "COPY table FROM STDIN CSV HEADER" < file.csv