我正在按照教程进行安装。但是,当它说
启动pgAdmin并基于PostGIS模板创建一个新数据库
我在哪里可以得到这个Postgis模板?我知道我已经使用自制软件安装了PostGIS。但是我找不到模板。我现在正在运行macOS。
我正在按照教程进行安装。但是,当它说
启动pgAdmin并基于PostGIS模板创建一个新数据库
我在哪里可以得到这个Postgis模板?我知道我已经使用自制软件安装了PostGIS。但是我找不到模板。我现在正在运行macOS。
Answers:
PostgreSQL 9.1的新方法
由于RK的建议之下,我接过来一看,在本教程中,发现对PostgreSQL 9.1所有你需要做的就是添加了扩展postgis
和postgis_topology
使用pgAdmin的上下文菜单现有的数据库。为了创建一个postgis模板,我创建了一个名为的新数据库template-postgis
,然后添加了这些扩展名。然后,我使用此模板创建了另一个数据库。使用时,pg_dump
我发现导出的大小要小得多,因为它似乎只包括这些行而没有转储扩展功能:
CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology;
旧的冗余方法:
我最终在这里使用.sql文件:
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql
/Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql
另外,将现有的PostGIS数据库导入由该模板创建的新数据库时,也会出现此错误:
ERROR: type "spheroid" already exists
因此,在创建了一个名为“ template_postgis”的空白数据库之后,我按照此处的说明进行操作并用来ON_ERROR_ROLLBACK=on
设置模板:
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/postgis.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/spatial_ref_sys.sql -v ON_ERROR_ROLLBACK=on
psql -U postgres -d template_postgis -1 -f /Applications/Postgres.app/Contents/MacOS/share/contrib/postgis-2.0/topology.sql -v ON_ERROR_ROLLBACK=on
然后导入我的备份数据库,例如:
psql -U someuser -d somedb -1 -f somefile.sql -v ON_ERROR_ROLLBACK=on
更老的方法:
我是这样做的:
createdb -E UTF8 -T template0 template_postgis
createlang -d template_postgis plpgsql
psql --quiet -d template_postgis -f /Applications/Postgres.app/Contents/MacOS/share/extension/postgis--2.0.1.sql
路径postgis--2.0.1.sql
取决于您的设置。
如果您运行的是PostgreSQL 9.1+,则无需理会模板数据库。只需创建一个数据库,然后在pgAdmin的SQL视图上键入并运行
CREATE EXTENSION postgis;
这将在空间上启用您的数据库。
CREATE EXTENSION postgis_topology;
CREATE EXTENSION
需要超级用户权限,因此实际创建/使用模板可能是一个好主意。
实际上,这是postgis安装的基础。
如果您有postgis模板,则可以从中创建一个新数据库,如下所示:
createdb -T postgistemplate -O gis gisdb
如果您没有它,可以通过以下方式做到这一点:
sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql
psql -d postgistemplate -f /usr/share/postgresql-8.2-postgis/spatial_ref_sys.sql
您可以使用bash脚本Debian / Ubuntu-create_template_postgis-debian.sh,在这里
我希望它可以帮助您...
postgres
没有权限使用终端,在这种情况下,该sudo su postgres
命令将以静默方式失败。为了克服这个问题,您可以在所有这些命令之前加上sudo -u postgres
以postgres用户身份运行该命令,而无需切换到postgres用户。
据我所知,研讨会可以使用一些脚本来创建这些模板数据库。也可以在这里找到:https : //github.com/pgRouting/pgrouting-contrib/blob/master/scripts/create_templates.sh
最终,您需要在这里和那里进行一些更改,因为它是为Debian / Ubuntu设计的。但是,您只需选择所需的内容即可。
#!/bin/sh
instance_name=$1
psql << EOF
create database $instance_name;
\connect $instance_name
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
EOF
我使用此bash脚本在启用postgis的情况下执行新数据库的创建,并在stdin上给出名称。
Postgres 9.3
PostGIS 2.1.3