Postgresql 将时间戳字段添加到ogr2ogr导入Postgis

Postgresql 将时间戳字段添加到ogr2ogr导入Postgis,postgresql,sequelize.js,postgis,gdal,ogr2ogr,Postgresql,Sequelize.js,Postgis,Gdal,Ogr2ogr,我设法创建了一个模型/模式,并使用将地理点插入Postgis。因为我有很多积分(>100K),我渴望回到我以前导入的方式,使用(gdal),这要快得多(几乎是瞬间而不是>20分钟)。由于我希望在初始导入后继续使用sequelize,我仍然希望sequelize预先创建模型/模式,但随后使用ogr2ogr进行导入,然后使用sequelize继续CRUD 我发现了这个片段“[…]解决这个问题的一种方法是先创建表结构,然后使用OGR2OGR加载数据。”这让我想到这也适用于Postgres/Postgi

我设法创建了一个模型/模式,并使用将地理点插入Postgis。因为我有很多积分(>100K),我渴望回到我以前导入的方式,使用(gdal),这要快得多(几乎是瞬间而不是>20分钟)。由于我希望在初始导入后继续使用sequelize,我仍然希望sequelize预先创建模型/模式,但随后使用ogr2ogr进行导入,然后使用sequelize继续CRUD

我发现了这个片段“[…]解决这个问题的一种方法是先创建表结构,然后使用OGR2OGR加载数据。”这让我想到这也适用于Postgres/Postgis

Sequelize为createdAt和updatedAt创建时间戳列,这是我喜欢的。但当我使用ogr2ogr时,我会得到“createdAt列中的null值”作为loginfo

基于稍微相似的问题,我尝试通过添加-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进行导入,但保留时间戳列?

当您使用
sequelize创建表时。定义
创建DAT
更新DAT
列将自动创建为
时区不为空的时间戳

但您可以在sequelize定义脚本中规则NOTNULL约束:

const Mytable = sequelize.define('mytable', {
    id: {type: Sequelize.INTEGER, primaryKey: true},
    createdAt: {type: Sequelize.DATE, validate: {notNull:false}}
});
然后创建表,如下所示:

CREATE TABLE mytables
(
  id integer NOT NULL,
  "createdAt" timestamp with time zone,
  "updatedAt" timestamp with time zone NOT NULL,
  CONSTRAINT mytables_pkey PRIMARY KEY (id)
)

@JGH根据您的建议,使用默认时间戳是有意义的。我已经可以使用sequelize进行设置,如下所述:


您是否在表定义中为
createdAt
设置了默认值?像
createdAt timestamp NOT NULL默认当前\u timestamp
Ha!我们的答案错了!因为你的是几秒钟前,我会批准你的!Thx。哦,时间非常接近!谢谢你。
var user = sequelize.define('user', {
  createdAt: {
    type: DataTypes.DATE,
    field: 'beginTime',
    defaultValue: sequelize.literal('NOW()')
  }
}, {
  timestamps: true,

});