繁体   English   中英

使用 psql 从 csv 文件复制时,null 列的“”会生成错误,而不是 null

[英]When using psql to copy from a csv file, a “” for a null column generates an error instead of a null

我正在尝试使用 copy 将大型 csv 文件复制到 postgres 表中。

某integer列主要是null。 在 csv 文件中,这一列只有“”。

每一列都被引用,这对于其他列似乎不是问题。

当我尝试复制它时出现此错误:

ERROR: invalid input syntax for integer: ""

我尝试在我的复制语句中将 NULL 子句设置为“”和“”。 '' 什么都不做,"" 生成错误:

zero-length delimited identifier at or near """"

我尝试使用 sed 将所有“”更改为“”,但即使将 null 子句设置为“”,这仍然不起作用。 我仍然得到

ERROR: invalid input syntax for integer: " "

现在,我可以通过将列设置为 -1 来继续。 反正我不是很关心这个专栏。 我可以将它设置为 null,或者忽略它,但是当我试图将它从复制命令的列定义部分中取出时,postgres 对我大喊大叫。

所以我的问题归结为:如何告诉 postgres 将 "" 视为 null 值?

谢谢你。

在 a.csv 文件中指示缺失值 (null) 的典型方法是在该字段中不添加任何内容。 例如,如果您有三列( ABC )并且B没有值,则 .csv 文件将包含"Col A value",,"Col C value" ""是一个字符串值,而不是一个数值,因此无法将其视为一个值。

这就是force_null选项的用途:

将指定列的值与 null 字符串匹配,即使它已被引用

所以假设 int 列的名称是“y”:

\copy foo from foo.csv with (format csv, force_null (y));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM