8

CSV ファイルをバージョン 9.2 にインポートしたいのですが、CSV ファイルの最後の列の位置に二重引用符があり、NULL 値を表しています。

"2","1001","9","2","0","0","130","","2012-10-22 09:33:07.073000000",""

タイプ Timestamp の列にマップされます。postgreSQL は "" が好きではありません。NULL オプションを設定しようとしましたが、正しく設定していないのでしょうか? NULL as '""and NULL ''and NULL as ''andを試してみましNULL ""たが、成功しませんでした。これが私のコマンドです:

COPY SCH.DEPTS 
FROM 'H:/backups/DEPTS.csv' 
WITH (
 FORMAT CSV,
 DELIMITER ',' ,
 NULL  '',
 HEADER TRUE,
 QUOTE   '"' 
 )

しかし、それはエラーで失敗します:

エラー: タイプ タイムスタンプの入力構文が無効です: ""

CONTEXT: COPY depts、2 行目、列の有効期限: ""

PSブール値の文字列表現をCOPYコマンドに指定する方法はありますか? CSV (多数あります) を作成したユーティリティでは、「false」と「true」が使用されていました。

4

2 に答える 2

9

空の文字列( "")は有効なタイムスタンプではなく、またはモードCOPYを提供しているようには見えません。それは逆ですが、それはあなたが望むことをしません。FORCE NULLFORCE EMPTY TO NULLFORCE NOT NULL

おそらく、タイムスタンプのフィールド(おそらくまたはテーブル)をCOPY含むテーブルにデータを入れてから、を使用する必要があります。textUNLOGGEDTEMPORARYINSERT INTO real_table SELECT col1, col, col3, NULLIF(tscol,'') FROM temp_table;

COPYブール値として受け入れる必要があるためtruefalse問題は発生しません。

csvまたは、単純なPythonスクリプトとモジュールを使用してCSVを読み取り、を使用してPgpsycopg2に行します。COPYまたは、クリーンアップされた新しいCSVを書き出して、それをにフィードしCOPYます。または、PentahoKettleやTalendなどのデータ変換を行うETLツールを使用します。

于 2013-01-25T08:42:36.537 に答える