我通过postgresql将数据从.txt文件导入到我的数据库。
问题是,某些电影的某些列是空的。例如,对于电影“abcd”没有评级,当通过COPY
导入时,postgresql会抛出错误“此列中没有数据”。如何在CREATE TABLE
命令中捕获此错误。我尝试使用“NULL”,但它也不起作用。
CREATE TABLE movies
(
imdib varchar NOT NULL,
name varchar NOT NULL,
year integer NULL,
rating float NULL ,
votes integer NULL ,
runtime varchar NULL ,
directors varchar NULL ,
actors varchar NULL ,
genres varchar NULL
);
COPY movies from 'C:\Users\Max\Desktop\imdb_top100t.txt' DELIMITER E'\t' ;
错误消息:
ERROR: missing data for column „year“
CONTEXT: COPY movies, Line 3060: „tt0283003 “
********** Error **********
ERROR: missing data for column „year“
SQL Status:22P04
Context: COPY movies, Line 3060: „tt0283003 “
编辑:这是在第3060行
tt0081590SällskapsresanellerFinns det svenskt kaffepågrisfesten1980 7.3 4477 107分钟。 Lasseà berg | Peter HaldLasseà berg | Lottie Ejebrant | Jon Skolmen喜剧
**编辑2:我认为这是问题“Ôpostgresql无法识别这封信**
答案 0 :(得分:0)
默认COPY格式的NULL表示为\N
,如下所示:
copy (select null) to stdout;
结果:
\N
但是如果你从一个尚未被Postgres COPY导出到该文件的文件中复制,那么它就没有理由使用postgres格式及其反斜杠转义序列。
通常,它是用于表格式数据的CSV格式,需要作为COPY的选项显式启用,如:
COPY tablename FROM 'filename.txt' (DELIMITER E'\t', FORMAT CSV, NULL '');
如果需要,可以使用FORCE_QUOTE
和FORCE_NOT_NULL
选项将NULL与空字符串区分开来。
答案 1 :(得分:0)
这是在第3060行:
tt0081590SällskapsresanellerFinns det svenskt kaffepågrisfesten1980 7.3 4477 107分钟。 Lasseà berg | Peter HaldLasseà berg | Lottie Ejebrant | Jon Skolmen喜剧