【问题标题】:Copying CSV data into Postgres with Unix Timestamp values使用 Unix 时间戳值将 CSV 数据复制到 Postgres
【发布时间】:2016-05-20 09:21:23
【问题描述】:

目前还不清楚如何将包含 unix 时间戳值的 CSV 文件复制到 Postgres。例如,假设我有一个如下所示的 CSV 文件:

timestamp, column_1, column_2, column_3
1439935260;"A";"B";"C"
1439935261;"A";"B";"C"
1439935262;"A";"B";"C"

我还有一个包含以下列的数据库:

timestamp    | timestamp without time zone | 
column_1     | character varying(40)       | 
column_2     | timestamp without time zone | 
column_3     | timestamp without time zone |

我希望命令

\copy my_table FROM 'my_file.csv' DELIMITER ';' CSV HEADER;

工作,但它没有。你会收到错误

错误:日期/时间字段值超出范围:“1439935260”

将带有 unix 时间戳值的 CSV 文件复制到表中的正确方法是什么?

【问题讨论】:

  • 你不能直接复制。您需要先将其放入不同的表中,然后将“unix”值转换为适当的时间戳
  • 如果数据不多 - 您可以在插入该表之前创建触发器,如果​​该表的目的始终用于此类 COPY 导入,则其函数将执行 NEW."timestamp" = to_timestamp(NEW."timestamp")跨度>
  • @VaoTsun:触发器破解是不可能的,因为在这种情况下,查询在 BEFORE INSERT 阶段之前被取消。

标签: postgresql


【解决方案1】:

查看我对数据库管理员的回答,

我建议

  1. 如果是新表,则在表 abstime 上创建类型。
  2. 然后在完成类型更改后在表上运行ALTER 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多