我想知道这个.csv文件的分隔符是什么。我试图通过COPY FROM语句导入.csv,但不知怎的,它总是抛出一个错误。当我将分隔符更改为E' \ t'它会抛出一个错误。当我将分隔符更改为' |'它抛出了一个不同的错误。我一直试图导入一个愚蠢的.csv文件3天,我无法取得成功。 我真的需要你的帮助。这是我的.csv文件:Download here, please
我在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
);
MY COPY声明:
COPY movie FROM '/home/max/Schreibtisch/imdb_top100t_2015-06-18.csv' (DELIMITER E'\t', FORMAT CSV, NULL '', ENCODING 'UTF8');
当我使用SHOW SERVER_ENCODING
时,它会说" UTF8"。但是为什么地狱后不能从列中读取数据呢?我真的不明白。我使用Ubuntu 64位,.csv文件具有所需的所有权限,postgresql也有。请帮我。
这些是我的错误:
错误:列"名称"缺少数据 背景:复制电影,第1行:" tt0468569,黑暗骑士,2008,9,1440667,152分钟,Christopher Nolan,Christian Bale | Heath Ledger | Aar ......"
**********错误**********
错误:列"名称"缺少数据 SQL状态:22P04 背景:COPY电影,第1行:" tt0468569,黑暗骑士,2008,9,1440667,152分钟,Christopher Nolan,Christian Bale | Heath Ledger | Aar ......"
答案 0 :(得分: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列的表,则上述命令对我有效。
答案 1 :(得分:1)
使用此代码代替它在Linux上以及Windows上正常工作
\COPY movie(imdib,name,year,rating,votes,runtime,directors,actors,genres) FROM 'D:\test.csv' WITH DELIMITER '|' CSV HEADER;
还有一件事在你的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
并使用单字节分隔符,如',','|'等
希望这对你有用..!