首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用psql \copy导入带有时间戳列的.csv (dd.mm.yyyy hh.mm.ss)

使用psql \copy导入带有时间戳列的.csv (dd.mm.yyyy hh.mm.ss)
EN

Stack Overflow用户
提问于 2012-12-26 15:14:30
回答 3查看 31.3K关注 0票数 10

我试图使用.csv命令(而不是psql \COPY副本)将数据从psql \COPY文件导入PostgreSQL9.2数据库。

输入.csv文件包含一个带有dd.mm.yyyy hh.mm.ss格式时间戳的列。

我已经将数据库数据样式设置为DMY。

代码语言:javascript
代码运行次数:0
运行
复制
set datestyle 'ISO,DMY'

不幸的是,当我运行\COPY命令时:

代码语言:javascript
代码运行次数:0
运行
复制
\COPY gc_test.trace(numpoint,easting,northing,altitude,numsats,pdop,timestamp_mes,duration,ttype,h_error,v_error) 
FROM 'C:\data.csv' WITH DELIMITER ';' CSV HEADER ENCODING 'ISO 8859-1'

我知道这个错误:

错误:超出范围的日期/时间字段值:"16.11.2012 07:10:06“ 提示:也许你需要一个不同的“日期”设置。 上下文:复制跟踪,第2行,列timestamp_mes:"16.11.2012 07:10:06“

这个日期有什么问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-26 15:28:26

你试过设置 setting of the 吗?

代码语言:javascript
代码运行次数:0
运行
复制
SET datestyle = 'ISO,DMY';

您使用psql元命令\copy,这意味着输入文件是客户端的本地文件。但是仍然需要服务器强制输入来匹配数据类型。

更普遍的情况是,与psql元命令\copy不同的是,psql元命令在服务器上调用COPY并与其密切相关。我引用\set的话

注意:此命令与SQL命令集无关。

票数 11
EN

Stack Overflow用户

发布于 2016-03-05 09:02:37

我发现在应用psql命令时很难在同一会话中应用“SET datestyle”。更改整个数据库/服务器上的数据风格(仅用于导入)也可能对其他用户或现有应用程序产生副作用。因此,我通常在加载之前修改文件本身:

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash 
#
# change from dd.mm.yyyy to yyyy-mm-dd inside the file
# note: regex searches for date columns separated by semicolon (;) 
sed -i 's/;\([0-9][0-9]\)\.\([0-9][0-9]\)\.\([0-9][0-9][0-9][0-9]\);/;\3-\2-\1;/g' myfile
# then import file with date column
psql <connect_string> -c "\COPY mytable FROM 'myfile' ...."
票数 4
EN

Stack Overflow用户

发布于 2016-04-26 09:50:22

您所使用的日期样式是德国的。PostgreSQL支持这种日期样式。试着使用以下方法:

代码语言:javascript
代码运行次数:0
运行
复制
SET datestyle TO German;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14042452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档