如何从文本文件加载数据到PostgreSQL数据库?

30

我有一个文件(CSV文件):

value1|value2|value2....

value1|value2|value2....

value1|value2|value2....

value1|value2|value2....

我想把这些数据加载到一个PostgreSQL表中。

5个回答

26
下面是我稍微修改过的COPY版本,对我来说效果更好,其中我指定了CSV格式。这种格式可以轻松处理文本中的反斜杠字符。默认格式是有些古怪的TEXT
COPY myTable FROM '/path/to/file/on/server' ( FORMAT CSV, DELIMITER('|') );

7
如果您正在使用 psql,并且文件位于服务器无法访问但客户端可以访问的位置,请使用完全相同的命令,只需以 \copy 开头即可。 - Wildcard
2
对于那些想跳过CSV文件第一行的人,可以使用HEADER选项,例如 COPY myTable FROM '/path/to/file/on/server' ( FORMAT CSV, DELIMITER('|') , HEADER); - CodeBrew
@Wildcard 很棒的评论。 - Abdollah

18

2
它需要在文件名/文件路径周围加上引号。请更新您的答案,使用COPY myTable FROM 'value.txt' (DELIMITER('|')); - PradeepKumbhar

6

3

有一个名为Pgloader的工具,它使用上述的COPY命令,可以从csv(以及MySQL、SQLite和dBase)加载数据。它还使用单独的线程来读取和复制数据,因此速度非常快(有趣的是,它从Python转换为Common Lisp后获得了20到30倍的速度提升,详见博客文章)。

要加载csv文件,需要编写一个小配置文件,例如:

LOAD CSV  
  FROM 'path/to/file.csv' (x, y, a, b, c, d)  
  INTO postgresql:///pgloader?csv (a, b, d, c)  
  …

0
COPY description_f (id, name) FROM 'absolutepath\test.txt' WITH (FORMAT csv, HEADER true, DELIMITER '   ');

Example

COPY description_f (id, name) FROM 'D:\HIVEWORX\COMMON\TermServerAssets\Snomed2021\SnomedCT\Full\Terminology\sct2_Description_Full_INT_20210131.txt' WITH (FORMAT csv, HEADER true, DELIMITER ' ');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接