使用 PostgreSQL 时使用 COPY 命令处理错误
Posted
技术标签:
【中文标题】使用 PostgreSQL 时使用 COPY 命令处理错误【英文标题】:Handle error with COPY command when using PostgreSQL 【发布时间】:2016-01-31 14:34:30 【问题描述】:我有一个 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 ...
对其进行转换。查看许多现有的相关答案。
Copy NULL values present in csv file to postgres的可能重复
【参考方案1】:
您无法使用 COPY 命令执行此操作,但您可以修改目标表以接受这些数字字段的 NULL。
【讨论】:
以上是关于使用 PostgreSQL 时使用 COPY 命令处理错误的主要内容,如果未能解决你的问题,请参考以下文章
Django:RunSQL:使用 PostgreSQL COPY 命令
PostgresSQL使用Copy命令能大大提高数据导入速度