将`tsv`文件插入postgresql db

时间:2013-12-08 15:52:46

标签: database postgresql database-design insert tsv

我有几个文件保存为tsv。我想将它们插入到postgresql db中,用sql分析它们。

但是,我的问题是INSERT如何将postgresql 9.2这个tsv文件转换为windows 7下的CREATE TABLE ratings (distribution VARCHAR, votes VARCHAR, rank FLOAT, title VARCHAR);

感谢您的回复!

PS:我创建了具有正确值的表格,如:

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

该文件位于以下目录中:

{{1}}

4 个答案:

答案 0 :(得分:22)

你想要这样的东西:

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

E'\t'是必需的,否则您将收到如下错误:

  

错误:COPY的DELIMITER必须是单个单字节字符

如果您的TSV中的列与您的表格不完美对齐,您还可以通过执行以下操作来定义映射:

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

答案 1 :(得分: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'

答案 2 :(得分:2)

我可以使用csvsql中的csvkit执行此操作。

要读取TSV(或CSV)并将其创建/插入表格,我的命令行脚本如下所示:

csvsql --insert input.tsv  --table table_t --tabs --no-constraints --db postgresql://user:passwd@localhost/mydb

答案 3 :(得分:1)

不幸的是,但最简单的方法是将TSV转换成CSV。大多数内置Postgres导入实用程序来执行诸如将空字符串转换为空值,跳过标题等操作仅适用于CSV

看到这个简单的6 line Python answer on SO。在尝试和小时加载TSV后,我使用它然后像普通一样加载CSV而没有问题。