PostgreSQL导入TSV文件时deathYear字段\N值引发整数类型报错求助
这个问题我之前处理IMDb数据集的时候也碰到过!根源在于PostgreSQL的COPY命令默认不会把\N识别为NULL值,而是当成普通字符串,而你的deathYear是INTEGER类型,自然就报错了。下面给你最直接的解决办法:
解决方法
最简单的方案就是在COPY语句里显式指定NULL的表示符为\N,让PostgreSQL把TSV里的\N转换成NULL值存入INTEGER字段。修改后的导入语句如下:
COPY name_mock FROM '/home/pathtofile/name.basics.tsv' DELIMITER E'\t' CSV HEADER NULL '\N';
为什么这个能生效?
- 默认情况下,PostgreSQL的
COPY命令会把空字符串识别为NULL,但很多TSV数据集(比如你用的IMDb数据)习惯用\N来表示缺失值(比如未逝世的演员)。 - 通过添加
NULL '\N'参数,你相当于告诉PostgreSQL:“遇到\N就把它当成NULL处理”,而你的deathYear字段没有加NOT NULL约束,完全可以存储NULL值。
可选验证步骤
导入完成后,你可以执行下面的SQL确认效果:
SELECT nconst, primaryName, deathYear FROM name_mock WHERE deathYear IS NULL LIMIT 10;
应该能看到那些未逝世演员的deathYear显示为NULL,而不是导入报错了。
内容的提问来源于stack exchange,提问作者qer
相关产品推荐
相关产品推荐

