Ich habe ein Problem mit postgresql und QGIS:
- Ich kann Punkte / Linien / Polygone und Füllfelder hinzufügen
Aber ich kann nicht:
- Punkte / Linien / Polygone löschen
- Punkte / Linien / Polygone ändern (Feld verschieben oder ändern)
Beispiel: dbname = 'Europe' host = localhost port = 5432 user = 'postgres' sslmode = disable key = 'tid' geschätzte Daten = true srid = 900913 type = Point table = "public". "planet_osm_point" (way) sql =
QGIS ist als Admin-Ebene mit der Datenbank verbunden. Mit pdAdmin III kann ich alles (erstellen, löschen, ändern ...)
Die postgresql-Datenbank wird mit osm2pgsql aus OSM importiert .
Auf einer anderen Ebene, wie z. B. .shp, habe ich dieses Problem nicht.
Irgendeine Idee ?
Config: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10
qgis
postgresql
editing
osm2pgsql
Mathieu
quelle
quelle
Antworten:
Fest. Das Problem war, ist kein Primärschlüssel.
Führen Sie in pgAdmin diese Anforderung aus.
ALTER TABLE tableName ADD PRIMARY KEY (id);
Beispiel für die planet_osm_line-Tabelle und das Setzen der osm_id-Spalte als Primärschlüssel:
ALTER TABLE planet_osm_line ADD PRIMARY KEY (osm_id);
Bis osm_id ist einzigartig.
quelle
Die Lösung besteht darin, wie bereits erwähnt, einen Primärschlüssel zu erstellen.
Aber von
osm2pgsql
Natur aus, garantiert nicht, dass dasosm_id
einzigartig ist. Es kann mehrere Zeilen mit derselben osm_id erzeugen .Um
planet_osm_*
Tabellen in QGIS zu bearbeiten , ist es beispielsweise ratsam, eine weitere ID-Spalte hinzuzufügengid
.So fügen Sie eine eindeutige
gid
Spalte hinzu:QGIS hat Probleme, wenn die Geometriespalte nur GEOMETRIE ist. Einige Abfragen schlagen möglicherweise fehl. Ich fand es nützlich, die
planet_osm_polygon
Geometrie zu ändernMultiPolygon
mit:quelle
Ich denke, das ist ein Hauptproblem. Ihre Tabelle sollte eine haben und diese wird erkannt, wenn Sie die Tabelle über PGAdmin anzeigen.
Ich hatte das gleiche Problem, lud aber den Layer mit einem Primärschlüsselfeld namens ID (willkürlich) neu und alle meine Bearbeitungswerkzeuge sind jetzt in der Symbolleiste aktiv.
Mit SQL können Sie eine OID-Spalte des Datentyps 'serial' hinzufügen und mit der folgenden Anweisung einen Primärschlüssel erstellen:
Über eine GUI können Sie Ihren Layer mit einem Primärschlüssel neu laden, der von der Datenbank und damit von PostGIS und QGIS erkannt wird:
Gehen Sie von dort zurück zu PGAdmin, stellen Sie eine Verbindung zu Ihrer Datenbank her und klicken Sie auf die Tabelle, die Sie gerade neu erstellt haben. Jetzt können Sie sehen, ob die OID-Spalte erkannt wird:
quelle