Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用ogr2ogr更新pgsql表,PK有问题_Postgresql_Postgis_Ogr2ogr - Fatal编程技术网

Postgresql 使用ogr2ogr更新pgsql表,PK有问题

Postgresql 使用ogr2ogr更新pgsql表,PK有问题,postgresql,postgis,ogr2ogr,Postgresql,Postgis,Ogr2ogr,在使用ogr2ogr将新的GIS数据(从osm或特定)从shp导入pgsql时,我遇到了一个问题。 要创建我的表,我使用: ogr2ogr -overwrite --config PGSQL_OGR_FID myid -gt 65536 -f "PostgreSQL" "PG:host='host' user='myself' dbname=db password='motdepasse'" -nln rues --config GDAL_DATA "C:/OSGeo4W64/share/gd

在使用ogr2ogr将新的GIS数据(从osm或特定)从shp导入pgsql时,我遇到了一个问题。 要创建我的表,我使用:

ogr2ogr -overwrite --config PGSQL_OGR_FID myid -gt 65536 -f "PostgreSQL" "PG:host='host' user='myself' dbname=db  password='motdepasse'" -nln rues --config GDAL_DATA "C:/OSGeo4W64/share/gdal" -t_srs EPSG:2154 "C:/test01.shp"
使用PGSQL\u OGR\u FID强制PGSQL使用我的原始列作为主键。此密钥将使我的更新成为可能

因此,为了使用新数据进行更新,我想这样做:

ogr2ogr -update -append  --config PGSQL_OGR_FID myid -gt 65536 -f "PostgreSQL" "PG:host='host' user='myself' dbname=db  password='motdepasse' active_schema=public" -nln rues --config GDAL_DATA "C:/OSGeo4W64/share/gdal" -t_srs EPSG:2154 "C:/test02.shp"
但是pgsql根本不喜欢这样!我希望它用新的PK替换相同PK的数据,但它希望保留旧的PK并接受新的PK,这当然是不可能的,因此消息是:

ERROR:  duplicate key value violates unique constraint "rues_pkey"
DETAIL:  Key (osm_id)=(92868916) already exists.
是否可以使用ogr2ogr替换数据?似乎,当更新时,想要保留一切。。。 我不知道该怎么办。。。也许在我的请求中使用SQL查询

奇怪的是,这似乎与sqlite/spatialite一起工作! (见附件)

如果你有任何解决办法,非常感谢,并为我糟糕的英语道歉


Cyril

我认为ogr2ogr不能以这种方式更新表…标志
update
仅表示数据源在
update
模式下打开,而不是在
只读模式下打开。好的,谢谢。但是,如果不更新,为什么要创建更新+附加模式呢?非常奇怪…我正在尝试使用SQL请求,特别是在更新之前和之后使用触发器,但效果不是很好。。。如果你有什么想法,请不要犹豫!非常感谢。我认为ogr2ogr不能以这种方式更新表…标记
update
仅表示数据源在
update
模式下打开,而不是在
只读模式下打开。好的,谢谢。但是,如果不更新,为什么要创建更新+附加模式呢?非常奇怪…我正在尝试使用SQL请求,特别是在更新之前和之后使用触发器,但效果不是很好。。。如果你有什么想法,请不要犹豫!非常感谢。