2016-08-02 10 views
2

私は(Ubuntuの16.04で)のPostgres 9.5.3を使用していると私は私は、次のSQLコマンドを使用し、いくつかのtimestamptzフィールドのPostgres:エラーTIMESTAMPTZタイプでCSVからCOPYを使用して

... 
datetime_received timestamptz NULL, 
datetime_manufactured timestamptz NULL, 
... 

を持つテーブルを持っていますテーブルにインポートする

COPY tmp_table FROM '/tmp/aa.csv' DELIMITER ';' CSV ENCODING 'UTF-8'; 

COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER; 

と使用:CSVファイルを生成します。

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) 

CSVファイルの行の例:2番目のコマンドを実行しているときに

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; 

は、しかし、私は次のエラーが発生します

設定が間違っているか間違っていますか?

何か提案がありがとうございます!

+0

'/ tmp/aa.csv'の行はどのように見えるのですか... – donkopotamus

+0

@donkopotamus Edited;) –

+0

ちょっと疑惑:' 2016-08-06 00:00:00 + 07'から '2016- 08-06 00:00:00.000 + 07'として再度実行してください。 –

答えて

1

エラーは、Postgresが文字列'datetime_received'をタイムスタンプ値に変換しようとしていることを示しています。

これは、COPYがあなたのテーブルにヘッダー行を挿入しようとしているために起こります。 COPY TOと同じように、HEADER句をCOPY FROMコマンドに含める必要があります。

さらに一般的には、COPYを使用してデータを移動する場合は、TOFROMのコマンドがまったく同じオプションを使用していることを確認する必要があります。 1つのコマンドに対してENCODINGを指定し、他のコマンドでは指定しないと、クライアントのエンコーディングがUTF8でない場合、エラーが発生したり、データが暗黙的に破損する可能性があります。

関連する問題