【发布时间】: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