2013-12-08 57 views
14

我有幾個文件保存爲tsv。我想將它們插入到postgresql數據庫中,用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爲您的答案。我馬上試了一下,但得到了:'錯誤:複製的DELIMITER必須是單個單字節字符' – mrquad

+3

好的解決了它我必須使用'\ tab'鍵入一個選項卡。 Thx爲您提供幫助! – mrquad

+2

\ t - 標籤是默認的,所以在這種情況下,您不需要使用DELIMITER –

2

遺憾地說,但最簡單的方法是將TSV轉換成CSV。大多數內置Postgres導入實用程序來執行諸如將空字符串轉換爲空值,跳過標頭等操作都是僅限於CSV

看到這個簡單的6 line Python answer on SO。我使用它,然後像正常一樣加載CSV,沒有問題在Postgres試圖和小時後加載TSV。

+0

感謝您的下載投票。對於各種使用情況,upvoted的答案將不起作用,因此上述建議。;) –

12

你想是這樣的:

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

E'\t'是必需的,否則你會得到這樣的錯誤:

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


如果列在您的TSV不要」 t與您的表格完美對齊,您還可以通過執行以下操作來定義映射:

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

我可以用csvsqlcsvkit做到這一點。

要讀取TSV(或CSV),並創建/它插入到一個表,我的命令行腳本是這樣的:

csvsql --insert input.tsv --table table_t --tabs --no-constraints --db postgresql://user:[email protected]/mydb