如何将CSV中的datetime列导入PostgreSQL并解决datestyle相关报错
问题原因
你的CSV文件中日期格式为DD/MM/YYYY(日/月/年),而PostgreSQL默认的datestyle配置为MDY(月/日/年),导入时会将31/10/2020中的31识别为月份,因此触发数值超出范围的报错:
ERROR: date/time field value out of range: "31/10/2020 19:39"
HINT: Perhaps you need a different "datestyle" setting.
适配你场景的datestyle格式
你需要使用DMY(日/月/年)的日期顺序配置,和你CSV里的日期字段格式完全匹配。
调整方案
1. pgAdmin导入/导出按钮快捷方案(无需改数据库配置)
在导入向导的设置步骤中,找到日期格式(Date format)配置项,直接填入DD/MM/YYYY,时间格式填入HH24:MI,即可直接识别你的CSV日期值。
2. 临时调整(仅对当前数据库会话生效,适合单次导入)
连接到PostgreSQL数据库后,执行以下SQL命令即可完成配置:
SET datestyle = 'ISO, DMY';
可执行SHOW datestyle;验证配置是否生效,确认后重新执行导入操作即可。
3. 全局永久调整(对所有新连接生效)
找到PostgreSQL的配置文件postgresql.conf,找到datestyle配置项,修改为:
datestyle = 'iso, dmy'
保存后执行以下SQL重载配置即可生效,无需重启数据库服务:
SELECT pg_reload_conf();
4. COPY命令导入专属方案
如果你用COPY命令手动导入CSV,可直接在命令中指定日期格式,无需修改其他配置:
COPY 你的表名 FROM '你的CSV文件绝对路径' WITH ( FORMAT csv, HEADER, -- 如果CSV第一行是表头则保留该参数,否则删除 DATEFORMAT 'DMY' );
内容的提问来源于stack exchange,提问作者Uzor
相关产品推荐
相关产品推荐

