Как создать шаблон PostGIS?

19

Я следую инструкциям по установке pgrouting. Тем не менее, я не получил роль, когда он говорит

Запустите pgAdmin и создайте новую базу данных на основе вашего шаблона PostGIS

Где я могу получить этот шаблон postgis? Я знаю, что установил PostGIS, используя homebrew. Но я не смог найти шаблон. Я бегу MacOS сейчас.

Раджан Стхапит
источник
1
Какую версию PostGIS вы используете?
РК

Ответы:

16

Новый метод с 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

Поэтому я следовал приведенным здесь инструкциям и использовал их ON_ERROR_ROLLBACK=onдля настройки шаблона после создания пустой базы данных с именем "template_postgis":

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, если вы установили postgis из портов Kyngchaos, установочный файл postgis будет: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Бруно фон Париж
Нужен ли для SCHEMA новейший метод? Для чего это? (Ваш единственный пример, который я видел до сих пор, который делает это.)
Matt Wilkie
14

Если вы используете PostgreSQL 9.1+, вам не нужно беспокоиться о базе данных шаблонов . Просто создайте базу данных и затем в представлении SQL в pgAdmin введите и запустите

CREATE EXTENSION postgis;

Это позволит пространственно включить вашу базу данных.

RK
источник
Можно ли использовать метод шаблона? Или есть способ добавить эту информацию в диалог «новая база данных» в pgAdminIII?
Monkut
Вы, вероятно, также хотите добавитьCREATE EXTENSION postgis_topology;
Мэтт Уилки
1
@monkut в pgAdmin4 это можно сделать, щелкнув правой кнопкой мыши «Расширения» в дереве навигации
Мэтт Уилки,
CREATE EXTENSIONнужны привилегии суперпользователя, поэтому создание / использование шаблона может быть очень хорошей идеей.
Cromax
3

на самом деле это основа постгисной установки.

если у вас есть шаблон 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.
Кольцо
2

Насколько я помню, для семинара есть сценарий для создания этих шаблонных баз данных. Это также доступно здесь: https://github.com/pgRouting/pgrouting-contrib/blob/master/scripts/create_templates.sh

В конце концов вам нужно кое-что изменить, потому что это было написано для работы в Debian / Ubuntu. Но вы можете просто выбрать то, что вам нужно.

dkastl
источник
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

andilabs
источник