4

csv ファイルを PostgreSQL テーブル (9.2) にインポートしようとしています。1 つの列の値の入力構文が間違っているというエラーが表示されますが、PostgreSQL が列とその値を一致させていないようです。

次のコマンドで CSV をインポートしています。

\copy project_task from '/home/user/downloads/project_task_export.csv' WITH DELIMITER ',' CSV HEADER

エラーは次のようになります。

ERROR:  invalid input syntax for integer: "4.25"
CONTEXT:  COPY project_task, line 3, column sequence: "4.25"

私の csv データは次のようになります。

id,create_uid,create_date,write_date,write_uid,remaining_hours,date_start,description,sequence,date_end,active,planned_hours,partner_id,delay_hours,user_id,name,date_deadline,notes,type_id,company_id,priority,total_hours,state,progress,user_group_id,project_id,effective_hours,context_id,timebox_id
185,8,2012-06-05 09:51:09.562849,2012-09-10 08:52:05.789792,26,4.25,2012-06-19 15:54:07,"asdcxzzsrt ab cdefgqwer tyuipok asmmdmksa kmsaaqqwerr.
",10,,t,12,,0.0,6,byrteqwas oeirklm askeiurjqqpl,,,,1,2,12.0,open,64.579999999999998,,9,7.75,1,4

この CSV データとエラーをよく見ると、列の順序は 9 列目であり、エラーが表示されたのは、PostgreSQL が 9 列に対して 6 列目の値を使用しているように見えます。なぜそれをしているのですか?それとも、私は何か間違ったことをしていますか?

4

1 に答える 1

7

おそらく問題は、CSV ファイルの列の順序が宛先テーブルの順序と一致しないことです。最初の行のヘッダーに従って列をマップすると思うかもしれませんが、このドキュメントの抜粋COPYで述べたように、実際には最初の行を無視します:

HEADER
ファイル内の各列の名前を含むヘッダー行がファイルに含まれることを指定します。出力では、最初の行にテーブルの列名が含まれ、入力では最初の行は無視されます。このオプションは、CSV 形式を使用する場合にのみ許可されます。

\copyテーブルの名前の後に括弧で囲まれた列のリストに追加する必要があります。ファイルの順序に従ってください。

\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...
于 2013-03-07T13:32:07.647 に答える