我有一个包含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 ....
这是一行数据。
答案 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)