2017-07-25 507 views
1

私は区切り|でデータをインポートしようとすると、私はエラーが表示されます。ERROR:最後に、予想される列の後に余分なデータ - COPY

ERROR: extra data after last expected column

私は二重引用符または単一引用符を削除する場合、私はデータをロードすることができています以下のサンプルデータで問題が発生しているが、私の必要条件は除外せずにすべてのデータが必要です。

COPY public.dimingredient FROM '/Users//Downloads/archive1/test.txt' 
DELIMITER '|' NULL AS '' CSV HEADER ESCAPE AS '"' ; 

私のテーブル::

public.dimingredient 
(
    dr_id integer NOT NULL, 
    dr_loadtime timestamp(6) without time zone NOT NULL, 
    dr_start timestamp(6) without time zone NOT NULL, 
    dr_end timestamp(6) without time zone NOT NULL, 
    dr_current boolean NOT NULL, 
    casnumber character varying(100) COLLATE pg_catalog."default" NOT NULL, 
    ingredientname character varying(300) COLLATE pg_catalog."default" NOT NULL, 
    matchingstrategy character varying(21) COLLATE pg_catalog."default", 
    percentofconfidence double precision, 
    disclosurestatus character varying(42) COLLATE pg_catalog."default", 
    issand character varying(1) COLLATE pg_catalog."default", 
    sandmeshsize character varying(20) COLLATE pg_catalog."default", 
    sandquality character varying(20) COLLATE pg_catalog."default", 
    isresincoated character varying(1) COLLATE pg_catalog."default", 
    isartificial character varying(1) COLLATE pg_catalog."default", 
    CONSTRAINT dimingredient_pkey PRIMARY KEY (dr_id) 
) 

私のデータ:

これは私のコピーコマンドで、あなたのdampleデータに空行を省略

5144|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis(2-hydroxyethyl)-, (9z)"|"NO CAS MATCH FOUND"||Disclosed||||| 

5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)""|"NO CAS MATCH FOUND"||Disclosed||||| 
+0

最後の区切り文字には何も付いていませんか?予想通りにデータがあるはずですか?あなたがロードしているテーブルを私たちに見せてもらえますか? – Mokadillion

+0

@rajkumars - 投稿のすべてをコメントに貼り付ける代わりに編集する必要があります。あなたのテーブルDDLをいくつかのフォーマットと一緒に追加しましたが、データが切り捨てられてコピーされず、誤った表現をしたくありません。ただし、機密情報でない場合は、ファイルから1行または2行で質問を更新する必要があります。 – Nicarus

+0

'public.table'はどのように定義されていますか?それにはいくつの列がありますか? –

答えて

0

、私は別の取得します9.6のエラーメッセージ:

ERROR: unterminated CSV quoted field 
CONTEXT: COPY dimingredient, line 3: "5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|..." 

バージョン8.0ではCSV COPYが導入されて以来、間違いなくそのエラーメッセージが表示されていたので、あなたのデータが上記のデータとどのように違うのだろうかと思います。

エラーメッセージは簡単に説明しています。2行目に奇数個の引用符(")があります。

5145 
2016-07-01 13:34:25.1001891 
1900-01-01 00:00:00.0000000 
9999-12-31 23:59:59.9999999 
True 
93834 
9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)"|NO CAS MATCH FOUND||Disclosed||||| 

...そしてCOPYヒット:2は、引用符で囲まれた文字列中に引用符を倍増しているので

は、2行目のフィールドがあり、("""のようにエスケープされた)一つの二重引用符として解釈されています引用符で囲まれた文字列を解析する際にファイルの終わり。したがって、エラー。

解決策は、フィールドごとに偶数の"文字を使用することです。

フィールドに"文字が必要な場合は、別のQUOTEを選択するか、フィールドを引用して"の2倍にします。

+0

私はすべての方法がうまくいかないことに疲れました..私のデータは足とインチを持っているので、私はすべてのフィールドを削除する必要はありません。 –

+0

"去ることはほとんどありません。あなたは質問を広げて、あなたが試したこととあなたが得た正確なメッセージを正確に示すべきです。PostgreSQLのバージョンでは、質問に表示されたデータで報告するエラーメッセージが生成されないという未解決の問題がまだ残っています。 –

関連する問題