2011-11-14 3 views
1

私は5つの列でNAV_DATAというテーブルを作成しました:私はcsvファイルを持っているこれらの列の場合PostgreSQLのCOPYコマンドを発行私のPostgreSQLデータベース

id (PKEY) 
,name (VARCHAR) 
,call_type (VARCHAR) 
,date_created (date) 

いる区切りTAB \tとQuotechar "
また、中央の列にはいくつかの空のフィールドがあります。

copyコマンドでnull値を受け入れる方法を教えてください。

(name, call_type, date_created)の欄を挿入したいとします。私のCSVにはidというフィールドがありません。

DBに特定の列をコピーするにはどうすればよいですか?

問題は区切り記号TAB \tにもありますか?

+1

マニュアルの[該当するページ](http://www.postgresql.org/docs/current/static/sql-copy.html)を見て、不明な点があれば質問を修正してください。 –

+0

あなたは「5列」と言いますが、4つしか表示しませんか? –

答えて

2
copy "NAV_DATA" (name,call_type,date_created) from 'c:/test.txt' with delimiter '\t' csv 
+0

私は、テーブル名は引用符ではいけないと思います。疑問です。主キーIDはすべてのレコードに対して自動的に増分されますか? – Nava

+0

Postgresはテーブル名とカラム名で大文字と小文字を区別しますが、qoutesで囲まれていなければ小文字に変換されます。これは、NAV_DATAがNAV_DATAというテーブルに一致しないことを意味します。クエリに「NAV_DATA」と記述する必要があります。 – Tailor

+0

Erwinが提案したようなシーケンスを使用できます。個人的に私はCSVをインポートするときに私はCSV構造にマッチしたテーブルにインポートしてから、インポートしたダーティテーブルからSQLクリーンテーブルにコピーするためにSQLクエリを使用します。こうすることで、スペースをTRIMしたり、NULLを設定したり、シーケンスを作成したり、問合せDISTINCTを実行して重複を排除することができます。 – Tailor

1

あなたはNULL値はCSVファイルで表現されるかについて疑問に思う場合は@Milenが彼のコメントににリンクされてマニュアルページを見てみましょう。または、テーブルにテストデータ(NULL値を含む)を書き込んで、COPY TOでエクスポートします。 COPY FROMに期待される形式を正確に取得します。標準フォーマットNULL

は区切り文字間によって標準CSV形式で、\Nで表されます。そして、COPYコマンドで言及されていない列はそれぞれのデフォルト値で記入されます。

たとえば、シリアル列(おそらくidなど)は、すべての行に対応するシーケンスからnextval()を取得します。 idにデフォルト値がまだない場合は、create a sequenceとし、nextval('my_sequence_name')を列のデフォルトにします。

関連する問題