2015-04-14 24 views
-1

我想将一个表的数据复制到一个文件中。我在本地Windows机器上有一个小型的数据库表,这段代码没有问题。当我在开发环境(仍然是窗口,不同的数据库)中使用它时,出现错误。PostgreSQL中的一个简单的COPY语句8.4

我的standard_conforming_strings目前关闭。

这个查询:

COPY some_table TO 'C:\\temp\\test.csv' WITH CSV HEADER; 

给出了这样的错误:

WARNING: nonstandard use of \\ in a string literal 
LINE 1: COPY t_table TO 'C:\\temp\\test.csv' WITH CSV HEADER; 
        ^
HINT: Use the escape string syntax for backslashes, e.g., E'\\'. 


ERROR: relative path not allowed for COPY to file 


********** Error ********** 

ERROR: relative path not allowed for COPY to file 
SQL state: 42602 

我曾尝试:

'C:\temp\test.csv' 
'C:\\temp\\test.csv' 
'C:/temp/test.csv' 
'C:\/temp\/test.csv' 

而且在我所有的测试,在错误信息点插入符号^在^'C :.

+0

''C:\ TEMP \ test.csv''应该工作假设'standard_conforming_strings = on'这是默认的。 ''C:/ temp/test.csv''也应该可以工作。你是否得到所有版本的完全相同的错误消息? –

+0

是的,@a_horse_with_no_name。它可能是一个数据库设置阻止我这样做? – Kevin

+0

该文档说:从PostgreSQL 9.1开始,默认打开(以前的版本默认关闭)。我正在使用8.4。这可能是罪魁祸首吗?如果我改变它,它会对我的数据库产生负面影响吗?谢谢!编辑:它已关闭! – Kevin

回答

4

您正在使用PostgreSQL linux不是Windows。只需使用Windows客户端。

COPY是服务器端命令。它期望在服务器上有一个路径。该文件位于Windows客户端PC上,因此服务器无法访问它。

改为使用\copy而不是psql。或者使用PgAdmin的CSV导入器。

(较新版本的PostgreSQL会给你一个HINT有关此内容的错误消息。)