[英]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) 的典型方法是在该字段中不添加任何内容。 例如,如果您有三列( A
、 B
和C
)并且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.