Як створити шаблон PostGIS?


19

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

Запустіть pgAdmin та створіть нову базу даних на основі шаблону PostGIS

Де я можу отримати цей шаблон пошти? Я знаю, що я встановив PostGIS за допомогою homebrew. Але я не зміг знайти шаблон. Я зараз біжу макос.


1
Яку версію PostGIS ви використовуєте?
РК

Відповіді:


16

Новий метод з PostgreSQL 9.1

Завдяки поради РК нижче, я переглянув цей підручник і виявив, що для 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

А потім імпортував мій резервний db, наприклад:

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;

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


Чи можна все-таки використовувати метод шаблону? Або є спосіб додати цю інформацію до діалогового вікна "нова база даних" в pgAdminIII?
monkut

ви, мабуть, також хочете додатиCREATE EXTENSION postgis_topology;
matt wilkie

1
@monkut in pgAdmin4 це доступно за допомогою клацання правою кнопкою миші на "Розширення" у дереві навігації
matt wilkie

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. Але ви можете просто вибрати те, що вам потрібно.


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.

Постгреси 9.3

PostGIS 2.1.3

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.