web-dev-qa-db-ja.com

エラー:psqlで\ copyを使用すると、列のデータが欠落します

.txtファイルをPostgreSQLにインポートしようとしています。 txtファイルには6つの列があります。

Laboratory_Name Laboratory_ID   Facility    Zip_Code     City   State

そして213行。

次のコマンドを使用して、\copyを使用して、PostgreSQLのdoe2というテーブルにこのファイルの内容を入れようとしています。

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' '))

それは私にこのエラーを与えます:

missing data for column "facility"

私はこのエラーが発生したときに何をすべきかを周りを見回しましたが、何も助けにはなりませんでした。他の誰かがこれに遭遇しましたか?

16
nathanmgroom

3つの考えられる原因:

  1. ファイルの1行以上に、4文字以下のスペース文字(区切り文字)しかありません。

  2. 1つ以上のスペース文字が(偶然に)エスケープされました。引用符で囲まれていない値の最後にバックスラッシュが付いている可能性があります。使用している(デフォルト)textフォーマットの場合 マニュアルで説明:

    バックスラッシュ文字(\)をCOPYデータで使用して、行または列の区切り文字として使用される可能性のあるデータ文字を引用できます。

COPY TOまたはpg_dumpからの出力では、レイアウトが一致するテーブルから読み取るときに、これらの障害は発生しません。しかし、ファイルが編集されているか、または別の欠陥のあるソースからのものである可能性がありますか?

  1. 使用しているファイルthinkを使用していません。 psqlコマンドラインインターフェースの\copyメタコマンドはCOPYのラッパーであり、 client のローカルファイルを読み取ります。ファイルがサーバー上にある場合は、代わりにSQLコマンド COPY を使用します。
6