我正在使用Postgres 9.5.3(在Ubuntu 16.04上),我有一个包含一些timestamptz
字段的表
...
datetime_received timestamptz NULL,
datetime_manufactured timestamptz NULL,
...
我使用以下SQL命令生成CSV文件:
COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER;
并使用:
COPY tmp_table FROM '/tmp/aa.csv' DELIMITER ';' CSV ENCODING 'UTF-8';
导入表格。
CSV文件中的行示例:
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)
是否有任何缺失的步骤或错误的配置?
任何建议都表示赞赏!
答案 0 :(得分:1)
您看到的错误意味着Postgres正在尝试(并且失败)将字符串'datetime_received'
转换为时间戳值。
这种情况正在发生,因为COPY
正在尝试将标题行插入到表中。您需要在HEADER
命令中包含COPY FROM
子句,就像您对COPY TO
所做的那样。
更一般地说,当使用COPY
移动数据时,您应该确保TO
和FROM
命令使用完全相同的选项。如果您的客户端编码不是UTF8,则为一个命令而不是另一个命令指定ENCODING
可能会导致错误或无提示损坏数据。