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

时间:2012-10-02 12:37:08

标签: postgresql date time import timestamp

我正在尝试将数据从csv文件导入到postgresql中,遗憾的是它没有完美格式化。

示例:

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

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

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

为了导入数据,我使用copy:

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

当然它不起作用,因为日期和时间用','分隔,所以postgresql假定那些是2个独立的数据字段。

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

我尝试使用“sed's /,/ /'EURUSD30.csv> EURUSD30E.csv”导入之前编辑.csv文件但是我收到一个错误,说命令“'s /”是键入错误或无法找到。我很无能,因为这似乎适用于其他所有人,但这也不是我的首选。

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

由于

1 个答案:

答案 0 :(得分:4)

最好的办法是COPY将数据发送到TEMPORARYUNLOGGED表格,并从那里开始:

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

您也可以在该过程中进行任何其他所需的数据按摩。

合并时考虑时区。 DATE + TIME生成timestamp without time zone

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'

或时间戳的当地时区。