PostgreSQL:从csv缺失值复制到一个列与NOT NULL约束
问题描述:
我有一个INTEGER列具有NOT NULL约束和DEFAULT值= 0;PostgreSQL:从csv缺失值复制到一个列与NOT NULL约束
我需要从一系列csv文件中复制数据。
在其中一些文件中,此列是一个空字符串。
到目前为止,我已经将COPY命令中的NULL参数设置为某个不存在的值,所以空字符串不会被转换为NULL值,但现在我收到一个错误,指出INTEGER列的空字符串值不正确。
我想使用COPY命令,因为它的速度,但也许这是不可能的。 该文件不包含标题。文件中的所有列都有表中的对应项。
它有办法规定:
空刺痛为零,或
如果有恩空字符串使用默认的列值?
答
您可以创建在不包含列,并在其上创建一个INSTEAD OF INSERT
触发器表的视图。当您将COPY
数据放入该视图中时,将使用该表的默认值。不知道表现是否足够好。
+0
感谢您的建议。目前,我转向其他workaroud。 TEMP TABLE + UPDATE + INSERT(请参阅原文中的我的评论)。重要的问题是应该使用默认值与COPY操作,COPY中明确提及列以及如何避免类型不匹配。 –
你的意思是空串如''?然后问题是类型不匹配。如果列只是空的,你的设置默认为0应该可以正常工作'123,,456等'。 –
是的,我认为问题在于你说的类型不匹配,但由于某种原因它不起作用。我没有使用postgreSQL的经验,但在我看来,COPY就像是BULK insert,并且没有违约行为。我已经实现了一个解决方法,我使用允许NULL的临时表,然后将所有NULL更新为默认值,最后将记录插入到目标表中。我可以在明天发布工作示例以及文件示例 –