是否有可能从psql内导入OSM数据?
我正在使用Dockerfile的这个Bash脚本:
#!/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
安德烈·拉姆尼科夫
你可以使用\i
(你可能需要加倍反斜杠)将它包含到here-document中。假设你的post_pl.sql
在当前目录中(否则指定完整的path名)
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
不需要数据库。 需要数据库的osm2pgsql
可以放在EOL
,就在pg_ctl stop
之前。