我正在为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
Andrey Ramnikov
答案 0 :(得分:0)
你可以使用\i
将它包含在here-document中(你可能需要加倍反斜杠)假设你的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
不需要数据库。需要数据库的osm2pgsql
可以放在EOL
之后,就在pg_ctl stop
之前。