23

我有几个文件保存为 tsv。我想将它们插入postgresql数据库,用 sql 分析它们。

但是,我的问题是如何INSERT将此 tsv 文件放入postgresql 9.2windows 7

感谢您的回复!

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

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

该文件在目录中:

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

4

4 回答 4

35

你想要这样的东西:

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';
于 2016-06-28T20:49:22.853 回答
24

对于制表符分隔值,您可以使用 COPY:

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

根据文件的确切格式,它可能类似于:

COPY ratings FROM 'C:/Users/testUser/Desktop/TSV/ratings.list.tsv' DELIMITER '\t'
于 2013-12-08T17:03:11.613 回答
2

我可以使用来自csvkit的csvsql来做到这一点。

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

csvsql --insert input.tsv  --table table_t --tabs --no-constraints --db postgresql://user:passwd@localhost/mydb
于 2016-07-03T21:19:32.443 回答
0

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

在 SO 上查看这个简单的6 行 Python 答案。我使用它,然后在尝试加载 TSV 一个小时后,在 Postgres 中正常加载 CSV,没有问题。

于 2015-07-01T20:34:46.153 回答