簡単な例データベースにPostgresの9.5.1にSQL経由COPY
コマンドを使用しようとし...PG COPYエラー:「整数のための無効な入力構文」は任意の整数ずに引用されたCSVファイルをインポートするとき
私はこれを取得していますエラー:
ERROR: invalid input syntax for integer: "Sally"
CONTEXT: COPY customer_, line 2, column id_: "Sally"
********** Error **********
ERROR: invalid input syntax for integer: "Sally"
SQL state: 22P02
Context: COPY customer_, line 2, column id_: "Sally"
... CSV(コンマ区切り値)でこのデータをインポート:
"first_name_","last_name_","phone_","email_"
"Sally","Jones","425.555.1324","[email protected]"
"Jarrod","Barkley","206.555.3454","[email protected]"
"Wendy","Melvin","415.555.2343","[email protected]"
"Lisa","Coleman","425.555.7282","[email protected]"
"Jesse","Johnson","507.555.7865","[email protected]"
"Jean-Luc","Martin","212.555.2244","[email protected]"
は... pgAdminでで実行される次のSQLを介してインポートされる:
このテーブルへCOPY customer_
FROM '/home/parallels/Downloads/customer_.csv'
CSV
HEADER
;
...:
-- Table: public.customer_
-- DROP TABLE public.customer_;
CREATE TABLE public.customer_
(
id_ integer NOT NULL DEFAULT nextval('customer__id__seq'::regclass),
first_name_ text NOT NULL,
last_name_ text NOT NULL,
phone_ text NOT NULL DEFAULT ''::text,
email_ text NOT NULL DEFAULT ''::text,
CONSTRAINT pkey_customer_ PRIMARY KEY (id_)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.customer_
OWNER TO postgres;
COMMENT ON TABLE public.customer_
IS 'Represents a person whose pets visit our clinic.';
は、だから、列の名前を含む最初の行が正常に処理されているようです。障害ポイントは、CSVの第1のデータラインの第1のデータ値である。私のインポートされたデータは整数型ではないので、私はエラーメッセージで悩まされています。唯一の整数はid_
主キーで、自動インクリメントSERIAL
です。
私はPG COPY error: invalid input syntax for integerの質問ページを読んだ。しかし、この質問には整数値が含まれていました。空の引用符付き文字列にはNULLが含まれていませんでした。私の場合、ここではデータに整数値はありません。唯一の整数は、の生成値を持つ主キーSERIAL
列です(インポートされるデータには含まれません)。
また、質問、PostgreSQL ERROR: invalid input syntax for integerが見つかりました。しかし、それは無関係なようです。
指定しないために 'HEADER'の全体のポイントではない:ヘッダフラグは、単に最初の行、as documentedがいることをスキップするのPostgresに指示しますか?とにかく、私はあなたの提案を試みました(しかし、 'テキスト'の言葉を省略)。まだまだ不思議な違いがありますが、これまでに問題になっていた行を処理したような謎があります。私は '/home/parallels/Downloads/customer_.csv' CSV HEADER FROM 'COPYのcustomer_(first_name_、last_name_、phone_、email_) を実行しました;'と 'ERRORエラーを得た:カラムの欠落したデータ "last_name_" CONTEXT :COPYのcustomer_、8行目: "" ********** **********エラー ERROR:列のデータ欠落している "last_name_" SQL状態:22P04 コンテキスト:COPY customer_、line 8: "" ' –
最後のエラーは、CSVデータファイルの末尾**に空白行があることが判明しました。 PostgresはそのCSVには気をつけています。したがって、この回答は成功した回避策です。しかし、私はまだ列名の綴りが必要な場合は、 'COPY'コマンドで' HEADER'のポイントを理解していません。 –
[COPYのdoc](http://www.postgresql.org/docs/current/static/sql-copy)を詳しく読んでください。html)は、ファイルの読み込み時に列名が無視されることを示しています。 'HEADER'フラグは単にPostgresにその最初の行をスキップするように指示します(エクスポート時にPostgresにその最初の行を生成するよう指示します)。したがって、この回答に示されているように列名を指定することは、バグではなく機能として必要となります。 –