DDL中的SQL NULL(数据定义语言)

时间:2015-06-13 15:29:06

标签: sql postgresql

我通过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无法识别这封信**

2 个答案:

答案 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_QUOTEFORCE_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喜剧