2016-02-23 1 views
1

Я работаю над этим Баш скрипт для Dockerfile:Можно ли импортировать данные OSM изнутри psql?

#!/bin/bash 
set -e 

gosu postgres postgres --single -jE <<-EOL 
    CREATE USER "$OSM_USER"; 
EOL 

gosu postgres postgres --single -jE <<-EOL 
    CREATE DATABASE "$OSM_DB"; 
EOL 

gosu postgres postgres --single -jE <<-EOL 
    GRANT ALL ON DATABASE "$OSM_DB" TO "$OSM_USER"; 
EOL 

# Postgis extension cannot be created in single user mode. 
# So we will do it the kludge way by starting the server, 
# updating the DB, then shutting down the server so the 
# rest of the docker-postgres init scripts can finish. 

gosu postgres pg_ctl -w start 
gosu postgres psql "$OSM_DB" <<-EOL 
    CREATE EXTENSION postgis; 
    CREATE EXTENSION hstore; 
    ALTER TABLE geometry_columns OWNER TO "$OSM_USER"; 
    ALTER TABLE spatial_ref_sys OWNER TO "$OSM_USER"; 
EOL 
gosu postgres pg_ctl stop 

я тусклый, чтобы добавить две команды импорта после ALTER TABLE:

shp2pgsql -I -s 4326 -W "latin1" post_pl.shp post_pl > post_pl.sql 
psql -h 172.17.0.2 -U postgres -d gis -f post_pl.sql 

osm2pgsql -H 172.17.0.2 -U postgres -d gis --hstore -s -S `./osm_stylesheet ./hessen-latest.osm.pbf` 

Мой вопрос, может ли он работать? Можем ли мы импортировать данные, когда мы находимся внутри psql? И если да, как я могу это сделать?

TNX

Андрей Ramnikov

ответ

0

Вы можете просто включить его в документ-здесь, используя \i (вы, вероятно, необходимо удвоить обратный слэш) Предполагая, что ваш post_pl.sql находится в текущем каталоге (в противном случае укажите полный путь к файлу)

gosu postgres pg_ctl -w start 
gosu postgres psql "$OSM_DB" <<-EOL 
    CREATE EXTENSION postgis; 
    CREATE EXTENSION hstore; 
    ALTER TABLE geometry_columns OWNER TO "$OSM_USER"; 
    ALTER TABLE spatial_ref_sys OWNER TO "$OSM_USER"; 
    \\connect gis -- Assuming a different DB is needed here ... 
    \\i post_pl.sql 
EOL 
gosu postgres pg_ctl stop 

Я предполагаю, что здесь shp2pgsql лань s не нужна база данных. osm2pgsql, которому нужна база данных, может быть размещена сразу после EOL, непосредственно перед pg_ctl stop.

+0

В моем Dockerfile я поставил это ADD команды: RUN MKDIR -p /docker-entrypoint-initdb.d ** ADD ./osm_stylesheet /docker-entrypoint-initdb.d/osm_stylesheet ADD ./post_pl.sql/докер -entrypoint-initdb.d/post_pl.sql ADD ./run.sh /docker-entrypoint-initdb.d/run.sh RUN chmod + x /docker-entrypoint-initdb.d/*.sh**, но i получите сообщение об ошибке, что файл .sql не существует. –

+0

Вероятно, предполагается, что файл .sql находится в другом каталоге. (или существует проблема разрешения или пользователя). Попробуйте указать полное имя пути. Или создайте необходимое вам значение в/tmp /) – joop