ERLEDIGT osm2pgsql Einstellungen

Ich versuche gerade mal wieder, einen planet zu importieren, aber irgendwie bekomme ich es nicht hin, dass (nur) die richtige Platte genutzt wird.
Meine Systemplatte ist ziemlich voll (nur noch gut 3GB Platz frei), aber ich habe eine andere Platte mit rund 700GB frei. Im Grunde scheint es auf den ersten Blick zu funktionieren, aber nach ein paar Minuten füllt mir irgendwas während des Imports mit osm2pgsql immer die erste Platte ganz voll und dann wird osm2pgsql “not-gekillt”.

Meine Optionen sind so:

osm2pgsql --create --hstore --slim --drop --database=osm \
  --tablespace-index=osm --cache=12288 --flat-nodes=flat.nodes --latlong --style=${STYLE} ${OSMFILE}

(flat.nodes landet hierbei auch auf der richtigen Platte, die osm-Datenbank liegt in einem osm-Tablespace, der liegt auch auf der richtigen Platte).

Weiterhin habe ich systemweit einen temp-Tablespace für temporäre pgsql-Dateien auch auf der externen Platte (der allerdings aber wohl nicht genutzt wird).

psql (14.2)
Type "help" for help.

osm=# \db+
                                               List of tablespaces
    Name    | Owner  |              Location               | Access privileges | Options |  Size   | Description 
------------+--------+-------------------------------------+-------------------+---------+---------+-------------
 osm        | martin | /Volumes/WD750/planet/pg_tablespace |                   |         | 5069 MB | 
 pg_default | martin |                                     |                   |         | 42 MB   | 
 pg_global  | martin |                                     |                   |         | 560 kB  | 
 temp       | martin | /Volumes/WD750/pg_temp_tablespace   |                   |         | 0 bytes | 
(4 rows)


irgendwie wird wohl eine temporäre Datei auf die volle Platte geschrieben, aber ich weiß nicht welche. Hat jemand eine Idee?

Wenn auf der Systemplatte sehr wenig Platz ist, ist es besser, Postgresql komplett auf die andere Platte zu verlegen, anstatt mit Tablespaces zu arbeiten. Wie du richtig festgestellt hast, werden sonst für temporaräre Daten die zu kleine Platte benutzt.

Folgende Schritte:

  • Postgresql anhalten: sudo systemctl stop postgresql
  • Postgresql-Verzeichnis bewegen: sudo mv /var/lib/postgresql/13/main /andere/platte/wo-auch-immer
  • Symlink anlegen: sudo ln -s /andere/platte/wo-auch-immer /var/lib/postgresql/13/main
  • Postgresql wieder hochfahren: sudo systemctl start postgresql

Bitte für die von dir installierte Version anpassen und die 13 eventuell entsprechend ersetzen. Du musst mit den Rechten etwas aufpassen. Postgresql möchte, dass seine Verzeichnisse Postgresql allein gehören.

Vielen Dank, ging danach leider immer noch nicht. ich hatte das vor längerem auch schonmal so gemacht, aber gedacht, irgendwie müsste man das über Einstellungen hinbekommen können, dass er nicht auf der ersten Platte schreibt.

Weiteres Nachforschen hat ergeben, dass “/System/Volumes/VM” vollgelaufen ist, da liegen beim Mac die swapfiles, wahrscheinlich war das Problem, dass ich 12GB für den node-Cache angegeben hatte (das sind 75% meines RAM wie vorgeschlagen, aber wenn dann der swapfile zu groß wird geht das bei 5GB freiem Platz nicht). Mit einer kleineren Einstellung von jetzt 4GB node cache scheint es zu gehen, die nodes sind durch und der swap ist stabil).

falls es jemand braucht, mit homebrew ging das Umswitchen so:

brew services stop postgresql
mv /opt/homebrew/var/postgres /Volumes/externePlatte/postgres
ln -s /Volumes/externePlatte/postgres /opt/homebrew/var/postgres
brew services start postgresql