gpt4 book ai didi

Postgresql - 将导入时 csv 的时间和日期合并到时间戳

转载 作者:行者123 更新时间:2023-11-29 12:00:50 25 4
gpt4 key购买 nike

我正在尝试将数据从 csv 文件导入到 postgresql,不幸的是它的格式不完美。

例子:

DATE,TIME,NUMERIC,NUMERIC,NUMERIC,NUMERIC,INTEGER

我想将数据导入到包含以下列的表中:

timestamp with timezone, numeric, numeric, numeric, numeric, integer

为了导入数据,我使用复制:

COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;

当然这是行不通的,因为日期和时间是用“,”分隔的,所以 postgresql 假定它们是 2 个独立的数据字段。

我已经设法将 .csv 导入到一个像 .csv 一样设置的表中,但是我以后需要将日期和时间作为带有时区的时间戳,因为我将处理大量数据由于性能问题,导入后转换将是我最后的选择。

我尝试在使用“sed 's/,//' EURUSD30.csv > EURUSD30E.csv”导入之前编辑 .csv 文件,但我收到一条错误消息,提示输入了命令“'s/”错误或找不到。我很无能,因为这似乎对其他所有人都有效,但这也不是我的第一选择。

如果可以简单地告诉 postgresql 在导入时将时间和日期合并到一个时间戳值中,将会更容易。有什么想法吗?

谢谢

最佳答案

最好的办法是将数据COPYTEMPORARYUNLOGGED 表,然后从那里执行:

INSERT INTO real_table
SELECT col1, col2, col3, datecol + timecol, col6, ...
FROM temp_copy_table;

您也可以在此过程中进行任何其他所需的数据处理。

合并时考虑时区。 DATE + TIME 产生一个没有时区的时间戳:

regress=# SELECT pg_typeof(DATE '2012-02-01' + TIME '10:00');
pg_typeof
-----------------------------
timestamp without time zone
(1 row)

并且您可能希望存储带时区的时间戳,因此您可能希望告诉 Pg 将日期+时间解释为处于特定时区:

(datecol + timecol) AT TIME ZONE 'UTC'

或者时间戳的本地时区是什么。

关于Postgresql - 将导入时 csv 的时间和日期合并到时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com