将大量csv导入postgreSQL中

时间:2017-03-29 09:26:49

标签: postgresql csv import-csv

我有一个包含2550列的csv文件,我想将其导入到postgreSQL中。

首先在postgreSQL中导入csv我应该创建表,并使用\copy从csv复制到表。但是,如果表格中有大量的列,如我的情况,我无法手动创建表格。

任何解决方案?

更新

数据结构如下: dZ(01)直到dZ(2550)基本上在-50到+50之间:

id | date    | time      | localtime | pid | dZ(0)..dZ(1)......dZ(2550)|
---|---------|-----------|-----------|-----|---------------------------|
17|11-11-2014| 16:33:21 | 1.45E+15   |2375 |0 0 0 0 0 -1 0 -1 0 -5 -10|

CSV结构:(我使用'';'分隔符)

17;13-11-2014;08:09:37;1.45E+15;4098;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 3 0 -2 3 -2 1 0 0 1 1 3 -2 3 4 2 -2 -2 ....

这是一行数据。

2 个答案:

答案 0 :(得分:3)

dZ列导入文本列,然后将其转换为数组:

创建临时表:

create table s (
    id int,
    date date,
    time time,
    localt double precision,
    pid int,
    dz text
);

设置日期样式:

set datestyle = 'DMY';

导入临时表;

\copy s from '/home/cpn/codigo/file.csv' with (format csv, delimiter ';')

创建将权利日期和时间合并为时间戳并将dZ转换为数组的权威表:

create table t (
    id int,
    datetime timestamp,
    localt double precision,
    pid int,
    dz integer[]
);

从临时填充权威:

insert into t (id, datetime, localt, pid, dz)
select
    id, date + time, localt, pid,
    regexp_split_to_array(dz, '\s')::int[]
from s

答案 1 :(得分:1)

回复有点旧,以防万一仍在寻找的人。 这可以使用 python 来完成。

将 DataFrame 中的数据视为 df。

df= df.rename(columns=str.lower)

from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')

df.to_sql('table_name', engine)

Read more here