【问题标题】:How can I import TIMESTAMP into POSTGRES without seconds? Coming from large CSV如何在几秒钟内将 TIMESTAMP 导入 POSTGRES?来自大型 CSV
【发布时间】:2020-01-23 01:52:22
【问题描述】:

请原谅新手 POSTGRES 的问题,我对 MSMSQL 有点熟悉,但我可能也会在那里挣扎。

我有一个包含大约 1200 万行的 CSV,我正在尝试导入。其中一个字段是格式为 "YYYY-MM-DD HH:MM" 的日期字段。

我的表的字段类型设置为 TIMESTAMP(对吗?)。 CSV 导入失败,提示 “错误:日期/时间字段值超出范围:“2019-20-09 04:00””

如何导入此类日期字符串?

我目前的陈述如下:

CREATE TABLE WoSWeatherGrids
(
    id serial NOT NULL,
    Location NUMERIC(6),
    Date TIMESTAMP,
)

COPY WosWeatherGrids(Location,Date) 
FROM '\\location\Weathergrids.csv' DELIMITER ',' CSV HEADER;

收到的错误是:

ERROR:  date/time field value out of range: "2019-20-09 04:00"
HINT:  Perhaps you need a different "datestyle" setting.
CONTEXT:  COPY wosweathergrids, line 2, column date: "2019-20-09 04:00"
SQL state: 22008

我无法更改 CSV 中的字符串,因为这是一个从另一个软件的输出自动运行的过程,希望每天发生几次。我希望有一个简单的方法可以突出显示以允许我导入此字符串类型。

CSV 样本类型

Location,Date
1075,2019-20-09 04:00
1075,2019-20-09 05:00
1075,2019-20-09 06:00
1075,2019-20-09 07:00

编辑: 这个问题似乎源于 Postgres 不喜欢 YDM DateStyle 格式这一事实。原始系统之一是使用 MS SQL,而 T-SQL 可以处理它。我无法修改那个系统,所以仍然需要处理这个问题。

EDIT2: 根据文档here 我已经能够使用以下内容将示例 YYYY-DD-MM HH:SS 日期类型转换为我需要的日期类型。 select to_char(to_timestamp('2019-20-09 04:00', 'YYYY-DD-MM HH24:MI'), 'HH24:MI DD/MM/YYYY');。我仍然有些困惑,我需要了解如何从 CSV 的输入中执行此操作,或者如何创建一个临时表,然后创建一个适当的表并在途中进行转换。

【问题讨论】:

  • 你的日期风格是什么?,你必须把日期风格改成 YDM,提示很清楚提示:也许你需要一个不同的“日期风格”设置
  • 好收获。但是,显然,YDM 不是 postgres 中的日期样式。 ERROR: invalid value for parameter "DateStyle": "ISO, YDM" 使用时SET datestyle to "ISO, YDM"

标签: database postgresql date import timestamp


【解决方案1】:

创建一个临时列(fec)并在更新日期列之后,例如:

CREATE  TABLE WoSWeatherGrids
 (
   id serial NOT NULL,
   Location NUMERIC(6),
   Date TIMESTAMP,
   fec text
 )

COPY WosWeatherGrids(Location,fec) 
FROM '/tmp/datos.csv' DELIMITER ',' CSV HEADER;

update WoSWeatherGrids set date = to_timestamp(fec,'YYYY-DD-MM HH:MI');

alter TABLE WoSWeatherGrids drop COLUMN fec;

【讨论】:

  • 这是最好的答案,因为它不需要修改日期的处理方式
【解决方案2】:

您必须将 datestyle 设置为 ISO, DMY 或类似名称。这里重要的部分是ISO,因为您的时间戳(几乎)是 ISO 格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多