我需要将CSV文件导入Postgres(版本9.6.3),我需要帮助来了解执行此操作的最佳方法。
CSV的格式如下所示,并且了解实际导入文件的最佳方式,我也不确定我应该在表中用于存储'time'字段的数据类型,因为它包含毫秒并且是格式为'YYYY.MM.DD HH:MM:SS.MS'
Time,Col1,Col2,Col3,Col4
2017.05.01 00:00:02.851,1.09062,1.09057,4.35,5.42
2017.05.01 00:00:03.368,1.09062,1.09058,3.22,1
...
我有pgadmin客户端所以可以使用它,但我也愿意从命令行使用原始SQL或使用Python(Python 3.6)来创建表并导入数据。
我想要导入的文件大小从20mbs到数百mbs大小,所以我想找到最快的方法。
任何帮助或指针都非常感谢。
谢谢!
您的表格可能如下所示(为列选择numeric types之一):
create table my_table(
time timestamp,
col1 numeric,
col2 numeric,
col3 numeric,
col4 numeric);
使用copy command,例如:
copy my_table from '/data/my_file.csv' (format csv, header);
select * from my_table;
time | col1 | col2 | col3 | col4
-------------------------+---------+---------+------+------
2017-05-01 00:00:02.851 | 1.09062 | 1.09057 | 4.35 | 5.42
2017-05-01 00:00:03.368 | 1.09062 | 1.09058 | 3.22 | 1
(2 rows)
如果文件非常大,您可以将其导入未记录的表,并在该alter table之后记录(请参阅alter table)。这可以减少导入的时间。
alter table my_table set unlogged;
copy my_table from '/data/my_file.csv' (format csv, header);
alter table my_table set logged;
拥有Postgres的操作系统用户必须具有该文件的读访问权限。