2013-12-08 14 views
14

私はいくつかのファイルをtsvとして保存しています。私はそれらをpostgresqldbに挿入して、SQLでそれらを分析したいと思います。`tsv`ファイルをpostgresql dbに挿入します

しかし、私の問題はINSERTこのtsvファイルをpostgresql 9.2の下にwindows 7のですか?

返信いただきありがとうございます。

PSは:私のような右の値を持つテーブルを作成しました:

CREATE TABLE ratings (distribution VARCHAR, votes VARCHAR, rank FLOAT, title VARCHAR);

ファイルがディレクトリである:タブ区切りの場合

C:/Users/testUser/Desktop/TSV/ratings.list.tsv

+1

TSV、またはあなたがコンマのようにCSVを意味しました値を分ける?後者の場合は、COPYを使用します。 –

+0

@Denis Thxあなたの答えです。 tsvでは、タブの区切りの値を意味します。 SQL文でCOPYを使用する方法の例を示してください。あなたの答えは – mrquad

答えて

13

、することができます使用:COPY:

http://www.postgresql.org/docs/current/static/sql-copy.html

ファイルの正確なフォーマットによっては、それはのようなものが考えられます。

悲しいこと
COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER '\t' 
+4

Thxです。私はすぐに試しましたが、 'エラー:COPYのDELIMITERは1バイト文字でなければなりません。 ' – mrquad

+3

解決済み' \ tab'を使う代わりにタブを打つ必要がありました。 Thxあなたの助けに! – mrquad

+2

\ t - タブはデフォルトですので、この場合は使用する必要はありませんDELIMITER –

2

が、最も簡単な方法は、CSVにTSVを変換することです。空の文字列をヌルに変換する、ヘッダーをスキップするなどの作業を行う組み込みのPostgresインポートユーティリティのほとんどはです。CSVのみです。

このシンプルな6 line Python answer on SOを参照してください。私はそれを使用して、TSVをロードしようとしてから1時間後にPostgresで問題なく通常のようにCSVをロードしました。

+0

ダウンロードの投票に感謝します。さまざまなユースケースに対して、アップアップされた答えはうまくいかないので、上記の提案をしてください。;) –

12

あなたはこのような何かしたい:

COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER E'\t'; 

E'\t'が必要とされ、そうでなければ、このようなエラーが出るでしょう:あなたのTSVドン」の列場合

ERROR: DELIMITER for COPY must be a single one-byte character


をテーブルと完全に並んでいれば、次のようにマッピングを定義することもできます:

COPY ratings (column_1, column_2, ... column_n) 
    FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' 
    DELIMITER E'\t'; 
+0

最後にCSVを追加する場合は、HEADERフラグを使用することもできます – kdazzle

1

csvsqlからcsvkitでこれを行うことができます。

TSV(またはCSV)を読み、作成/テーブルにそれを挿入するには、私のコマンドラインスクリプトは次のようになります。テキスト検索のベクトルのように

csvsql --insert input.tsv --table table_t --tabs --no-constraints --db postgresql://user:[email protected]/mydb 
関連する問題