1

CSV ファイルから postgreSQL テーブルにデータをインポートしています。

テーブルは次のようになります。

CREATE TABLE foo_stats (
                        td                      DATE NOT NULL,
                        ins_id                  INTEGER CHECK (ins_id > 0) NOT NULL,
                        df_id                   INTEGER CHECK (df_id > 0) NOT NULL,
                        pc                      REAL NOT NULL DEFAULT 0.0,
                        ph                      REAL DEFAULT 0.0 NOT NULL,
                        pl                      REAL DEFAULT 0.0 NOT NULL,
                        av                      REAL DEFAULT 0.0 NOT NULL,
                        cv                      BIGINT DEFAULT 0 NOT NULL,
                        avi                     REAL DEFAULT 0.0 NOT NULL,
                        cmi                     BIGINT DEFAULT 0 NOT NULL,
                        vwp                     REAL CHECK (vwp >= 0) NOT NULL,
                        atr                     REAL NOT NULL DEFAULT -99999,
                        pv                      REAL NOT NULL DEFAULT -99999,
                        pr                      REAL NOT NULL DEFAULT -99999,

                        PRIMARY KEY                     (ins_id, df_id, td)
                        );

一括コピーの前に、次を使用して主キーを削除しますALTER TABLE DROP CONSTRAINT PRIMARY KEY

COPYpsql CLI でコマンドを呼び出したときの CL のトレースを次に示します。

mydb=# COPY foo_stats FROM '/path/to/data/foo_stats.csv' WITH CSV;
ERROR:  invalid input syntax for integer: "1990-01-02"
CONTEXT:  COPY foo_stats, line 1, column id: "1990-01-02"
mydb=# 

入力 CSV ファイルの最初の数行は次のようになります。

"1990-01-02",388,3,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,4,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,1,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,7,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,6,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999

入力ファイルのデータ列は、テーブル スキーマと同じ順序になっています。エラーメッセージが表示される理由を誰か説明できますか?

PS: Ubuntu 10.0.4 LTS で PostgreSQL 8.4 を使用しています。

4

1 に答える 1

1

ここでテーブル定義とサンプルデータを切り取って貼り付けると、すべてが機能していることがわかります。

つまり、テーブル定義またはファイルのいずれかが、思ったとおりではありません。テーブルの列の順序が異なる場合は、COPYコマンドで列を指定できます。

ファイルが異なる場合は、おそらく肉眼では見えないものであるか、質問する前にファイルを見つけた可能性があります。このファイルがたまたまWindowsマシンからのものだとは思いませんか?

チェックする3つのこと:

  1. ファイルの先頭にある不要なバイト順マーク(BOM)
  2. \nではなく\r\nの行末
  3. その他の制御コード

サンプルデータを切り取って貼り付けてみて、それがインポートされるかどうかを確認してください。その場合は、実際のファイルをテキストエディタで開いて、再保存してみてください。それで問題が解決した場合は、16進エディタを入手して、サンプルファイルの実際のバイトを確認してください。

于 2012-06-28T10:56:42.787 に答える