如何从CSV文件向数据库添加经纬度值

时间:2019-04-27 13:11:31

标签: node.js postgresql import insert

我的基于节点的Web应用程序要求用户将lat文件作为csv文件上传。使用blob存储方法上传文件。但是现在我无法将文件直接导入到postgres数据库中,因为该表包含列ID,创建时间,纬度,很长时间,而csv文件仅包含纬度和长信息。由于这个原因,该表可能包含以前的值,我想导入可能不起作用,并且我想插入是唯一的选择。

请帮助我解决该问题。

2 个答案:

答案 0 :(得分:2)

您应首先将经纬度数据导入临时表中。
如果lat_long.csv文件具有以下结构:

lat, long
41.99646, 21.43141
40.24555, 20,24536
39.24152, 25.263634

然后您可以创建一个临时表:

CREATE TABLE lat_long_temp (lat DECIMAL, long DECIMAL);

并使用以下命令将数据导入表中:

COPY lat_long_temp FROM 'path-to-the-file' CSV HEADER DELIMITER ',';

path-to-the-file文件替换为lat_long.csv文件的路径。

此后,您可以查询该表,并通过为created_time列附加值来将结果添加到表中。

因此,如果您的结果表如下所示:

CREATE TABLE result_table (
  id BIGSERIAL PRIMARY KEY,
  created_time TIMESTAMP,
  latitude DECIMAL,
  longitude DECIMAL
);

您可以使用以下查询从lat_long_temp表中插入数据:

INSERT INTO result_table (created_time, latitude, longitude)
    SELECT now(), lat, long
    FROM lat_long_temp;

请注意,我假设您的ID列是自动递增的列,因此,无需为该列设置值。 如果您的ID不是自动生成的,那么您还必须在插入语句中为该列添加值。

答案 1 :(得分:0)

如果另一列具有默认值或由触发器填充,则只能从CSV文件中复制经/纬度列:

COPY my_table(latitude, longitude) 
FROM 'path-to-the-file' CSV HEADER DELIMITER ',';