使用PostgreSQL时处理COPY命令的错误

5
我有一个Python脚本,正在执行以下命令将CSV文件的内容复制到数据库中:
copy_query = "COPY table_name FROM STDIN DELIMITER '%s' CSV HEADER QUOTE '\"';" % (self.delimiter)

table_name代表一个已创建的具有特定类型的表格。CSV文件中的数据不总是与列类型匹配。例如,CSV文件可能像这样:

"row1", 123, "2012-11-11"
"row2", 346, "2012-11-12"
"row3", \N,  "2012-11-12"

如您所见,第2列应为int类型,但由于第3行的数据与int类型不匹配,整个操作失败了。有没有一种方法可以拒绝这一行?我更喜欢它填充适当类型的某些默认值,但彻底拒绝该行也可以。感谢您的帮助!


目前(9.5及更早版本),PostgreSQL没有提供让您像这样在COPY中转换或过滤行的方法。通常的解决方案是将其导入到一个带有所有“text”列的临时/未记录表中,然后执行“insert into ... select ...”进行转换。请参阅许多现有的相关答案。 - Craig Ringer
可能是将CSV文件中存在的空值复制到Postgres的重复问题。 - Kristján
1个回答

0

你不能用COPY命令来做这个,但你可以修改目标表以接受这些数字字段的NULL值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接