2015-04-14 21 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有關此內容的錯誤消息。)