2015-06-19 86 views
0

我在想這個.csv文件的分隔符是什麼。我試圖通過COPY FROM語句導入.csv,但不知怎的,它總是拋出一個錯誤。當我將分隔符更改爲E'\ t'時,會引發錯誤。當我將分隔符更改爲'|'時它會拋出一個不同的錯誤。我一直在試圖導入一個愚蠢的.csv文件3天,我無法取得成功。 我真的需要你的幫助。這裏是我的.csv文件:Download here, please如何設置分隔符Postgresql

我的PostgreSQL的代碼如下所示:

CREATE TABLE movie 
(
imdib varchar NOT NULL, 
name varchar NOT NULL, 
year integer, 
rating float , 
votes integer, 
runtime varchar , 
directors varchar , 
actors varchar , 
genres varchar 
); 

我的副本聲明:

COPY movie FROM '/home/max/Schreibtisch/imdb_top100t_2015-06-18.csv' (DELIMITER E'\t', FORMAT CSV, NULL '', ENCODING 'UTF8'); 

當我使用SHOW SERVER_ENCODING它說: 「UTF8」。但爲什麼地獄不能postgre從列中讀取數據?我真的不明白。我使用Ubuntu 64位,.csv文件具有它所需的所有權限,postgresql也有。請幫幫我。 這是我的錯誤:

ERROR: missing data for column "name" CONTEXT: COPY movie, line 1: "tt0468569,The Dark Knight,2008,9,1440667,152 mins.,Christopher Nolan,Christian Bale|Heath Ledger|Aar..."

********** **********錯誤

ERROR: missing data for column "name" SQL state: 22P04 Context: COPY movie, line 1: "tt0468569,The Dark Knight,2008,9,1440667,152 mins.,Christopher Nolan,Christian Bale|Heath Ledger|Aar..."

+0

那麼,我確定它,因爲它是一個.csv文件,它是逗號分隔。但問題是,在列之後有5個逗號,「,,,,,」,並且在每行之後。因此,因此postgre說:「錯誤額外的數據後最後期望列」我怎麼解決這個問題? – Blnpwr

回答

1

對我來說,以下工作:

COPY movie (imdib,name,year,rating,votes,runtime,directors,actors,genres) 
    FROM 'imdb_top100t_2015-06-18.csv' 
    WITH (format csv, header false, delimiter E'\t', NULL ''); 

不幸的是,該文件無效,因爲在行12011上,列year包含值2015 Video,因此導入失敗,因爲它無法轉換爲整數。然後進一步下行(64155行),無法將其轉換爲浮動,然後再進行一次投票,評級爲無效值NA

但是,如果您使用所有varchar列創建表,上述命令爲我工作。

+0

謝謝你,它在WINDOWS上爲我工作,但不是Ubuntu的。你有好主意嗎 ? – Blnpwr

1

使用

\COPY movie(imdib,name,year,rating,votes,runtime,directors,actors,genres) FROM 'D:\test.csv' WITH DELIMITER '|' CSV HEADER; 

和一個如下圖所示的代碼,而不是它工作正常在Linux和Windows上您的CSV文件的更多的東西插入頭:

imdib|name|year|rating|votes|runtime|directors|actors|genres 
tt0111161|The Shawshank Redemption|1994|9.3|1468273|142 mins.|Frank Darabont|Tim Robbins|Morgan Freeman 

,並使用單字節分隔符如',','|'等

希望這會爲你工作..!