gpt4 book ai didi

bash - 是否可以从 psql 内部导入 OSM 数据?

转载 作者:行者123 更新时间:2023-11-29 13:54:03 24 4
gpt4 key购买 nike

我正在为 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 内部导入数据吗?如果是,我该怎么做?

腾讯

安德烈·拉姆尼科夫

最佳答案

您可以使用 \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 不需要数据库。确实需要数据库的 osm2pgsql 可以放在 EOL 之后,就在 pg_ctl 停止 之前。

关于bash - 是否可以从 psql 内部导入 OSM 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com