【问题标题】:How to add lat long values into the database from CSV file如何从 CSV 文件将经纬度值添加到数据库中
【发布时间】:2019-04-27 13:11:31
【问题描述】:

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

请帮我解决这个问题。

【问题讨论】:

    标签: node.js postgresql import insert


    【解决方案1】:

    您应该先将经纬度数据导入临时表中。
    如果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 不是自动生成的,您还必须在该列的插入语句中添加值。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        相关资源
        最近更新 更多