从文件中将数据加载到Postgres中

时间:2014-10-28 00:57:18

标签: postgresql

我有以下两个文件,第一个是数据文件,其中第一列是行的唯一标识符,第二列表示id字段后面的字段的字典。

> cat data
1,NULL,37,M,NULL
2,NULL,25,F,NULL
3,NULL,42,F,NULL
4,NULL,18,M,NULL

> cat .dictionary
0,balance|double
1,age|int
2,gender|string
3,state|string

数据文件的大小可能非常大。

如何将这些数据输入Postgres?我应该编写自己的自定义数据加载器程序来解析文件并创建一个可以使用的.sql文件吗?或者通过JDBC直接连接到数据库并以这种方式加载它?

2 个答案:

答案 0 :(得分:1)

创建表格以保存此数据,然后使用COPY

create table Table1
(
 balance double precision,
 age     int,
 gender  varchar(10),
 state   varchar(10)
);

COPY Table1 FROM '/home/abc/data.txt' DELIMITER ',' CSV;

答案 1 :(得分:0)

作为@RADAR答案的变体,在创建表后,可以使用 psql 中的\copy命令。它包装了COPY,但在将所需权限带到本地文件系统(即您的计算机)而不是服务器上方面提供了一些好处,在这些服务器中您可能不一定具有所需的权限。

它可能比服务器端COPY慢,因为它不是纯粹的服务器端,但它是我通常在我需要这样做时使用的方法事情,我发现表现一般都很好。

作为一个相关的旁边,我发现在复制像这样的数据时,性能问题的最大原因是表上的索引和约束。如果您正在复制已经拥有它们的表,并且它有大量数据,我建议删除它们,进行复制,然后再重新应用它们。对于新表,请等到复制后创建任何索引或约束。差异可以是数量级。

有关\copy的详细信息,请参阅psql doc