Dazu brauchst die PostGIS-Erweiterung. Das Debian-/Ubuntu-Paket heißt “postgresql-16-postgis-3”. Diese muss danach in der Datenbank noch aktiviert werden: psql -d $DB_NAME -c "CREATE EXTENSION postgis;"
PostgreSQL hat “Datenbank-Cluster”, in jedem kann es mehrere “Datenbanken” geben, in einer Datenbank mehrere “Schemata” und in jedem Schema mehrere “Tabellen” (und Views, Funktionen usw.). In der Praxis spielen aber die Ebene “Cluster” und die Ebene “Schema” keine Rolle - Debian/Ubuntu erzeugen Dir bei der Installation automatisch einen Cluster, und beim Schema kommt, wenn Du nichts anderes angibst, immer das Schema “public” zum Einsatz, und das reicht normalerweise auch. Das heisst, Du musst nur mit “createdb” eine Datenbank erstellen und mit create extension postgis und ggf. auch create extension hstore die notwendigen Extensions installieren, dann kannst Du schon das osm2pgsql laufen lassen.
PostgreSQL hat eine eigene Benutzerverwaltung. Wenn Du am Linux als Benutzer chris angemeldet bist und psql eintippst, wird er versuchen, dich als Benutzer chris mit einer Datenbank chris zu verbinden. Der Standard-Admin-User heisst postgres. Eine einfache Methode, um Dir selber Adminrechte zu geben, ist sowas wie
su postgres
psql -c "create user chris with superuser"
exit
Danach kannst Du dann von Deinem Unix-Account aus problemlos createdb und alles mögliche ausführen. PostgreSQL wird automatisch annehmen, dass der Unix-User X sich als PostgreSQL-User X verbinden darf, dazu braucht der dann kein Password. Man kann dieses Verhalten über die Datei pg_hba.conf steuern.
Juchu, mit auth-method TRUST in hba_conf klappt der Import. NRW wurde in 7,5 Minuten importiert.
gis=# select osm_id, osm_type from postpass_line LIMIT 10;
osm_id | osm_type
------------+----------
162544332 | W
25815520 | W
59397374 | W
25984444 | W
59397376 | W
550912264 | W
24654752 | W
1042023845 | W
164733299 | W
25328363 | W
(10 rows)
Sollte ich nach dem Import wieder auf peer stellen? Bei trust findet nach meinem Verständnis quasi keine Authentification mehr statt.
EDIT: Die KombiViews wie postpass_pointpolygon fehlten noch, habe ich manuell erstellt.
Standardmäßig wird deine PostGIS nicht von außen erreichbar sein, solange sich also auf Deinem Rechner keine Benutzer tummeln, denen Du nicht vertraust und die die geheimen OSM-Daten stehlen könnten…
Wenn Du nett zu ihm bist, sagt er Dir auch, wie Du eine Tabelle mit lauter Boundingboxen anlegen kannst, aus der die Funktion dann immer die passende raussucht ;)
Ja. PostgreSQL hat einen “Query Planner”, der studiert erstmal Deine Abfrage und überlegt sich dann, wie er die voraussichtlich am schnellsten beantworten kann. Bei einem einfachen “select foo from bar where baz” ist das meistens trivial, aber sobald mehrere Tabellen beteiligt sind, explodieren oft die Kombinationsmöglichkeiten: Nehme ich jetzt jeden Eintrag aus A und suche mir jeweils den passenden aus B, oder umgekehrt, oder… das ist eine Wissenschaft für sich (siehe Doku zu EXPLAIN). Aber in dem von Dir skizzierten Fall wird der Query Planner merken, dass der Eingabewert der Funktion ja nicht von den Tabellenzeilen abhängt und sie daher nur einmal ausführen.