首页 > 解决方案 > 具有不同日期格式的 PostgreSQL COPY FROM csv

问题描述

我正在尝试使用 COPY FROM STDIN 函数将 CSV 数据上传到 Python 中的 PostgreSQL 数据库。

在 CSV 文件中,我的日期字段是 DD-MM-YYYY HH:MI,这给了我一个错误:

psycopg2.errors.DatetimeFieldOverflow:日期/时间字段值超出范围:“31-12-2020 08:09”

有没有办法在使用 COPY FROM 时定义日期/时间格式?

如果相关,DB 列是类型 TIMESTAMP。

我只知道如何使用逐行 INSERT 语句来做到这一点。

标签: postgresqlpsycopg2

解决方案


就在COPY命令之前:

set datestyle = euro;

show datestyle;
 DateStyle 
-----------
 ISO, DMY

然后这个工作:

SELECT '31-12-2020 08:09'::timestamp;
      timestamp      
---------------------
 2020-12-31 08:09:00

否则使用我的默认值datestyle

show datestyle;
 DateStyle 
-----------
 ISO, MDY

SELECT '31-12-2020 08:09'::timestamp;
ERROR:  date/time field value out of range: "31-12-2020 08:09"
LINE 1: SELECT '31-12-2020 08:09'::timestamp;

有关详细信息,请参阅此处的日期输入表 8.15。日期顺序约定


推荐阅读