【发布时间】:2012-09-23 07:28:30
【问题描述】:
我正在尝试将数据从 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 可以在导入时简单地被告知将时间和日期合并为一个时间戳值,那就更容易了。有什么想法吗?
谢谢
【问题讨论】:
-
复制命令没有任何改变数据的能力。如果您希望在导入时执行此操作,您可以尝试向表中添加一个触发器,该触发器将在每行插入和合并列后触发。不幸的是,最后,这在性能方面不会比在导入后执行操作更好。最好的办法是在导入之前清理 CSV 文件。
标签: postgresql date time import timestamp