Postgresql Postgres:使用时间戳类型的CSV复制时出错
我正在使用Postgres 9.5.3(在Ubuntu 16.04上),我有一个带有一些Postgresql Postgres:使用时间戳类型的CSV复制时出错,postgresql,Postgresql,我正在使用Postgres 9.5.3(在Ubuntu 16.04上),我有一个带有一些timestamtz字段的表 ... datetime_received timestamptz NULL, datetime_manufactured timestamptz NULL, ... 我使用以下SQL命令生成CSV文件: COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER;
timestamtz
字段的表
...
datetime_received timestamptz NULL,
datetime_manufactured timestamptz NULL,
...
我使用以下SQL命令生成CSV文件:
COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER;
CM0030;;INV_AVAILABLE;2016-07-30 14:50:42.141+07;;2016-08-06 00:00:000+07;FAHCM00001;;123;;;;;1.000000;1.000000;;;;;;;;80000.000000;;;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;
并使用:
COPY tmp_table FROM '/tmp/aa.csv' DELIMITER ';' CSV ENCODING 'UTF-8';
导入到表中
CSV文件中的行示例:
COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER;
CM0030;;INV_AVAILABLE;2016-07-30 14:50:42.141+07;;2016-08-06 00:00:000+07;FAHCM00001;;123;;;;;1.000000;1.000000;;;;;;;;80000.000000;;;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;
但是我在运行第二个命令时遇到以下错误:
ERROR: invalid input syntax for type timestamp with time zone: "datetime_received"
CONTEXT: COPY inventory_item, line 1, column datetime_received: "datetime_received"
我的数据库的时区是:
show timezone;
TimeZone
-----------
localtime(GMT+7)
(1 row)
是否缺少任何步骤或配置错误
任何建议都将不胜感激 您看到的错误意味着Postgres正在尝试(但失败)将字符串
'datetime\u received'
转换为时间戳值
之所以发生这种情况,是因为COPY
试图将标题行插入表中。您需要在COPY FROM
命令中包含HEADER
子句,就像在COPY to
命令中一样
一般来说,使用
COPY
移动数据时,应确保to
和FROM
命令使用的选项完全相同。如果客户端编码不是UTF8,则为一个命令而不是另一个命令指定ENCODING
可能会导致错误,或导致数据自动损坏。在/tmp/aa.csv
中的行看起来像什么…@donkopotamus Edited;)只是一个怀疑:将该行上的2016-08-06 00:00:00+07
更改为2016-08-06 00:00.000+07
,然后再次运行它。在这里使用简化的表格测试,但直接复制您的值,可以加载,日期格式可以。请提供实际的表结构(CREATETABLE语句)好吗?它试图(但失败)将字符串'datetime\u received'
解释为时间戳。您忘记告诉COPY FROM
忽略标题。