2015-06-19 41 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 

,并使用单字节分隔符如',','|'等

希望这会为你工作..!