Import mit osm2pgsql funktioniert nicht

Hallo,

ich habe eine PostGIS-DB mit folgenden Namen:


                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 gis       | gisuser  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

Der Import mit


~$ osm2pgsql -U gisuser -d gis --slim Downloads/canary-islands-latest.osm.pbf

liefert


osm2pgsql SVN version 0.82.0 (64bit id space)

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
DROP TABLE IF EXISTS planet_osm_point failed: ERROR:  must be owner of relation planet_osm_point

Error occurred, cleaning up

In der PostGIS-DB ist bereits eine Karte gespeichert, die ich auf gleiche Weise importiert habe und die mit obigem Befehl überschrieben werden sollte.

Für mich liest sich das so als würde die Table planet_osm_point nicht dem gisuser gehören. und somit der volle zugriff fehlen.
http://gis.stackexchange.com/questions/17750/cant-import-osm-data-to-postgis-permission-denied
das sieht so ähnhlich aus vielleicht hilft es.

Diesen Link habe ich auch gelesen, aber es hat mir nicht weiter geholfen. Kann es denn sein, dass eine Table einen anderen Owner hat als die Datenbank?

Ja, das kann sein, z.B. dann wenn du in der Vergangenheit mit einem Nutzer mit Adminrechten an der Datenbank rumgefummelt hast. Vermutlich hast du die existierende Datenbank damals mit einem anderen User der aber Adminrechte hatte importiert.

\c gis ; \dp

wuerde dir zeigen wem das Ding gehoert.
Nachdem du aber eh neu importieren willst, loesch doch einfach alles was in der Datenbank ist und erstell sie neu, dann schlaegt osm2pgsql auch nicht mehr beim Versuch auf, das zu tun…

alles ist unnötig: alles was mit planet_osm_ anfängt reicht.

Weil \dp mir keine neuen Erkenntnisse geliefert hat, habe ich die DB gelöscht und wie in http://wiki.openstreetmap.org/wiki/PostGIS/Installation beschrieben neu angelegt. Mit Ubuntu 14.04 bekomme ich nach


sudo -u postgres psql -d gis -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis.sql
sudo -u postgres psql -d gis -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql
sudo -u postgres psql -d gis -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis_comments.sql

Fehlermeldungen:

psql:/usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql:16229: ERROR:  current transaction is aborted, commands ignored until end of transaction block 

Wenn ich danach trotzdem versuche, das pbf mit osm2pgsql zu importieren, reagiert das System nicht mehr.

Wenn ich Tilemill starte, wird mir die Spanien-Karte gezeigt, die vorher in der DB war und eigentlich gelöscht sein sollte.

Tja, wenn du nur die Tabellen gelöscht hättest, die ich erwähnt hatte, hättest du diese - selbst gemachten - Probleme nicht.

Möglicherweise hast du ja jetzt auch noch verschiedenen Datenbanken gleichzeitig am laufen - nächster logischer Schritt deiner Arbeitsweise wäre die Neuinstallation des Rechners :wink:

Verschaffe dir einen Überblick über die aktuelle Lage z.B. mit PGADMIN3 oder den Info-Kommandos in psql (\d, \l und ähnliches) und mach dann weiter.

Gruss
walter

Wenn ich gis mit dropdb lösche, ist die DB immernoch vorhanden:


postgres=# dropdb gis
postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 gis       | gisuser  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

Das ist sehr seltsam.

nein, das ist nicht seltsam!
du bist als postgres angemeldet und willst eine db, die gis “gehört” löschen. das klappt nur, wenn postgres sql-admin ist, aber ob das so ist, kannst nur du wissen.

Wenn ich

dropdb -U gisuser gis

verwende, wird gis auch nicht gelöscht. Außerdem sollte postgres als Superuser doch alles dürfen? Wie lösche ich gis richtig?

hast du vorhin in psql “dropdb gis” oder “dropdb gis;” eingegeben?

möchte das ungerne ausprobieren.

Der Befehl in psql lautet “drop database gis;”

Ich find keine Dokumentation dazu, wie man psql von der Kommandozeile bedient. Ich halte mich daher an das oben verlinkte Wiki.

Im Wiki steht zu dem letzten Befehl: “After the activation, the following command should list the tables geometry_columns and spatial_ref_sys”. Das ist aber nicht der Fall. Ist hier schon etwas fehlgeschlagen?

semikolons!

Soweit ich mich erinnere zeigt das “-”, das du quasi im kontinuierlichen Modus bist, das Kommando also noch weiter geht. Versuch mal

dropdb gis;

Mit

sudo -u postgres dropdb gis

wird die DB gelöscht, wie mir \l anzeigt. Aber nach dem Anlegen (s. #12) und dem Befehl

psql --username=gisuser --dbname=gis --command="\d"

erhalte ich “No relations found.” Zeigt das einen Fehler an?

man psql

und in plsql: ?

solange du diese Grundlagen nicht drin hast bzw genau das eingibt, was wir dir sagen, ist für mich erst mal Funkstille.

Knatschige Grüsse
walter

Ob ich meine DB über sudo -u postgres steuere, wie im Wiki angegeben, oder mit der psql-Kommandozeile, sollte doch egal sein.

Ich lese gerade OSM-Daten neu ein. Möglicherweise war die .osm-Datei fehlerhaft. Die DB funktioniert jetzt wieder.