【发布时间】:2017-12-18 15:05:56
【问题描述】:
我设法创建了一个模型/模式并使用sequelize 将地理点插入 Postgis。由于我有很多积分(> 100K),我渴望回到以前使用ogr2ogr(gdal)导入的旧方式,这种方式要快得多(几乎是即时而不是> 20分钟)。由于我想在初始导入后继续使用 sequelize,我仍然希望 sequelize 预先创建模型/模式,然后使用 ogr2ogr 导入,然后使用 sequelize 继续 CRUD。
Here 我发现了这个片段“[...] 解决这个问题的一种方法是事先创建表结构并使用 OGR2OGR 来加载数据。”这让我想到这也适用于 Postgres/Postgis。
Sequelize 为 createdAt 和 updatedAt 创建时间戳列,这是我喜欢的。但是当我使用 ogr2ogr 时,我得到“createdAt”列中的空值违反非空约束作为 loginfo。
基于this 稍微类似的问题,我尝试通过添加 -sql 选项来添加 createdAt 列:
ogr2ogr -f PostgreSQL PG:"host='0.0.0.0' user='root' port='5432' dbname='db' password='pw'" /home/user/geojsonImportfile.json -nln "DataPoints" -a_srs EPSG:4326 -sql "SELECT url, customfield, wkb_geometry, CURRENT_TIMESTAMP as createdAt FROM '/home/usr/geojsonImportfile.json'" -dialect 'PostgreSQL'
运行时我得到的错误是:
ERROR 1: SQL Expression Parsing Error: syntax error, unexpected end of string, expecting '.'. Occurred around :
home/user/geojsonImportfile0.json'
除了我缺乏 SQL 知识外,我不确定这是否可行。
我该如何解决这个问题,即使用 ogr2ogr 进行导入但保留时间戳列?
【问题讨论】:
-
您是否在表定义中为
createdAt设置了默认值?喜欢createdAt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
标签: postgresql sequelize.js postgis gdal ogr2ogr