2016-03-16 40 views
0

我得到這個錯誤:複製CSV文件到一個表中的PostgreSQL

ERROR: syntax error at or near "\" 
LINE 1: \COPY "Staging_Budget" FROM 'C:\Users\My.Name\Desktop\RD - F... 
     ^
    ********** Error ********** 

當我試圖執行這個簡單的命令:

\COPY "Staging_Budget" FROM 'C:\Users\My.Name\Desktop\RD - Facilities Management (001321).csv'; 

誰能告訴我這是爲什麼?

另外,任何人都可以告訴我,爲什麼沒有網上的例子有驅動器(C :)或文件路徑中列出的文件類型(.csv)像我一樣?

Postgres的版本是9.5,我的操作系統是Windows 7

謝謝!

更新:

我想,而不是運行此聲明:

COPY "Staging_Budget" FROM STDIN 'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv'; 

我讀here,我需要移動的CSV文件到Postgres的CSV文件目錄。我沒有一個,所以我在上面的語句中的文件路徑中創建了它。現在,我得到這個錯誤信息:

ERROR: syntax error at or near "'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv'" 
LINE 1: COPY "Staging_Budget" FROM STDIN 'C:\Program Files (x86)\Pos... 
             ^

我不明白爲什麼當它在每一個例子給了我發現在網上和參考指南中的Postgres不喜歡撇號。

回答

0

請注意,只能在服務器中引用外部文件時才能使用'COPY .. FROM'。我的意思是,該文件必須可以被postmaster實例訪問。

我總是在Linux中應用的一種技術是'COPY .. FROM STDIN',在psql之前發佈cat。

看一看的參考指南: http://www.postgresql.org/docs/current/static/sql-copy.html

+0

Postgres數據庫在我的電腦上,所以服務器是localhost。所以,數據庫應該能夠引用我電腦上的任何文件,對吧?我也嘗試複製「Staging_Budget」從STDIN'C:\ Users \ My。名稱\桌面\ RD - 設施管理(001321).csv';並在'H:'處得到語法錯誤。我的語法有什麼問題嗎? – christopheralan88

+0

數據庫進程(postmaster)應該能夠訪問給定的文件,也就是postgres用戶(在其中運行PostgreSQL服務)可能具有對該文件的讀取權限。 –

+0

例如,在Linux中我們可以發出:$ cat file.csv | psql -c'從STDIN複製表'。在Windows中它是相似的,所以你可以執行:>鍵入file.csv | psql.exe -c'COPY table from STDIN' –

0

我能把這個說法的工作:

COPY "Staging_Budget" FROM 'C:\Program Files (x86)\PostgreSQL\9.5\data\csv\RD - Facilities Management (001321).csv' (DELIMITER ','); 

我猜的Postgres有與STDIN使用的撇號問題?此外,還需要將CSV文件放在Data文件夾內名爲CSV的文件夾中。最後,我需要確保「(DELIMITER',')」在聲明的最後 - 儘管參考指南指出使用CSV文件時默認爲「,」是默認的......我不確定爲什麼我不得不明確說明它是分隔符。

1

的問題是,你可以要麼COPY "Staging_Budget" FROM STDINCOPY "Staging_Budget" FROM 'C:\etc',但不能同時使用。既然你在Windows上,你可以忽略所有人對cat的評論。您不想從STDIN複製,您想從文件複製。

另外\copyCOPY不是一回事。在你的情況下,它看起來像你想COPY(無反斜槓),這是你的原始錯誤的來源。

+0

謝謝你的澄清,保羅。另外,我是否必須在postgres文件路徑中有CSV文件?當文件在我的桌面上,但是當我在文件路徑C:\ Program Files(x86)\ PostgreSQL \ 9.5 \ data下創建一個CSV文件夾時,該語句無效。 – christopheralan88

+0

只要它在某個地方Postgres已經讀取權限,它應該沒問題。當然,無論你把它放在哪裏,你都應該提供完整的路徑。 –

相關問題