如何创建PostGIS模板?


19

我正在按照教程进行安装。但是,当它说

启动pgAdmin并基于PostGIS模板创建一个新数据库

我在哪里可以得到这个Postgis模板?我知道我已经使用自制软件安装了PostGIS。但是我找不到模板。我现在正在运行macOS。


1
您正在使用哪个版本的PostGIS?
RK 2012年

Answers:


16

PostgreSQL 9.1的新方法

由于RK的建议之下,我接过来一看,在本教程中,发现对PostgreSQL 9.1所有你需要做的就是添加了扩展postgispostgis_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取决于您的设置。


要完成您的答案(在我的Mac上适用):在Mac上,如果您是从Kyngchaos端口安装postgis的,则postgis安装文件为:/usr/local/pgsql/share/extension/postgis--2.0.1.sql
布鲁诺·冯·巴黎

对于最新方法,是否需要“ SCHEMA”?这是为了什么?(到目前为止,您是我所看到的唯一一个做到这一点的例子。)
马特·威尔基

14

如果您运行的是PostgreSQL 9.1+,则无需理会模板数据库。只需创建一个数据库,然后在pgAdmin的SQL视图上键入并运行

CREATE EXTENSION postgis;

这将在空间上启用您的数据库。


仍然可以使用模板方法吗?或者,有没有一种方法可以将此信息添加到pgAdminIII中的“新数据库”对话框中?
2013年

您可能还想添加CREATE EXTENSION postgis_topology;
matt wilkie

1
@monkut在pgAdmin4中,可以通过右键单击导航树中的“扩展”来使用
matt wilkie

CREATE EXTENSION需要超级用户权限,因此实际创建/使用模板可能是一个好主意。
Cromax

3

实际上,这是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用户。
2014年


2
#!/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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.