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

Postgresql-将导入时csv的时间和日期合并到时间戳,postgresql,date,time,import,timestamp,Postgresql,Date,Time,Import,Timestamp,我正在尝试将csv文件中的数据导入postgresql,不幸的是,它的格式并不完美 例如: DATE,TIME,NUMERIC,NUMERIC,NUMERIC,NUMERIC,INTEGER 我想将数据导入到包含以下列的表中: timestamp with timezone, numeric, numeric, numeric, numeric, integer 对于导入数据,我使用“复制”: COPY tabledata FROM 'c:\Users\Public\Downloads\te

我正在尝试将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假定这是两个独立的数据字段

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

在导入之前,我尝试使用sed的/、/'euruds30.csv>euruds30e.csv编辑.csv文件,但是我收到一个错误,指出命令的//键入错误或找不到。我相当无知,因为这似乎对其他人都适用,但这也不是我的第一选择

如果postgresql可以在导入时简单地被告知将时间和日期合并为一个时间戳值,那么就更容易了。有什么想法吗

谢谢

您的最佳选择是将数据复制到临时或未标记的表中,并从中执行以下操作:

INSERT INTO real_table
SELECT col1, col2, col3, datecol + timecol, col6, ...
FROM temp_copy_table;
在此过程中,您还可以执行任何其他必需的数据处理

合并时考虑时区。日期+时间生成不带时区的时间戳:

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

(datecol + timecol) AT TIME ZONE 'UTC'
或者无论时间戳的本地时区是什么。

您最好将数据复制到临时或未标记的表中,然后从该表执行以下操作:

INSERT INTO real_table
SELECT col1, col2, col3, datecol + timecol, col6, ...
FROM temp_copy_table;
在此过程中,您还可以执行任何其他必需的数据处理

合并时考虑时区。日期+时间生成不带时区的时间戳:

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

(datecol + timecol) AT TIME ZONE 'UTC'

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

复制命令没有任何更改数据的能力。如果希望在导入时执行此操作,可以尝试向表中添加触发器,该触发器将在每次插入行和合并列后触发。不幸的是,最终,从性能角度来看,这不会比在导入后执行操作更好。最好在导入之前清理CSV文件。copy命令没有任何更改数据的能力。如果希望在导入时执行此操作,可以尝试向表中添加触发器,该触发器将在每次插入行和合并列后触发。不幸的是,最终,从性能角度来看,这不会比在导入后执行操作更好。您最好的选择是在导入之前清理CSV文件。如果您必须混合CSV数据,例如现在的时间戳,那么最好的选择是。此外,它还允许您在合并到目标表之前验证临时表中的数据。如果您必须混合来自csv的数据,例如现在的时间戳,那么这是最好的选择。它还允许您在合并到目标表之前验证临时表中的数据