Jak stworzyć szablon PostGIS?

19

Postępuję zgodnie z samouczkiem, aby zainstalować pgrouting. Jednak nie dostałem roli, gdy mówi

Uruchom pgAdmin i utwórz nową bazę danych w oparciu o szablon PostGIS

Gdzie mogę dostać ten szablon Postgis? Wiem, że zainstalowałem PostGIS przy użyciu homebrew. Ale nie mogłem znaleźć szablonu. Teraz uruchamiam makra.

rajan sthapit
źródło
1
Z jakiej wersji PostGIS korzystasz?
RK

Odpowiedzi:

16

Nowa metoda w PostgreSQL 9.1

Dzięki radom RK poniżej rzuciłem okiem na ten samouczek i stwierdziłem, że dla PostgreSQL 9.1 wszystko, co musisz zrobić, to dodać rozszerzenia postgisi postgis_topologyistniejącą bazę danych za pomocą menu kontekstowych pgAdmin. Aby utworzyć szablon Postgis, stworzyłem nową bazę danych o nazwie, template-postgisa następnie dodałem te rozszerzenia. Następnie utworzyłem drugą bazę danych, korzystając z tego szablonu. Podczas używania pg_dumpzauważyłem, że rozmiar eksportu był znacznie mniejszy, ponieważ wydaje się, że zawiera on tylko te linie i nie zrzuca funkcji rozszerzenia:

CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology;

Stara redundantna metoda:

Skończyło się na użyciu plików .sql tutaj:

/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

Ponadto wystąpił ten błąd, gdy zaimportowałem istniejącą bazę danych PostGIS do nowej bazy danych wykonanej z tego szablonu:

ERROR:  type "spheroid" already exists

Po wykonaniu pustej bazy danych o nazwie „template_postgis” postępowałem zgodnie z instrukcjami tutaj i użyłem jej ON_ERROR_ROLLBACK=ondo ustawienia:

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

A następnie zaimportowałem moją kopię zapasową db, np .:

psql -U someuser -d somedb -1 -f somefile.sql -v ON_ERROR_ROLLBACK=on

Jeszcze starsza metoda:

Ja to zrobiłem:

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

Ścieżka do postgis--2.0.1.sqlbędzie inna w zależności od konfiguracji.

Aram Kocharyan
źródło
Aby wypełnić odpowiedź (która działa na moim Macu): na Macu, jeśli zainstalowałeś Postgis z portów Kyngchaos, plik instalacyjny Postgis to: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris,
Czy w najnowszej metodzie potrzebny jest program „SCHEMA”? Po co to (Twój jedyny przykład, jaki do tej pory widziałem, to robi.)
Matt Wilkie
14

Jeśli korzystasz z PostgreSQL 9.1+, nie musisz przejmować się bazą danych szablonów . Wystarczy utworzyć bazę danych, a następnie w widoku SQL w pgAdmin, wpisać i uruchomić

CREATE EXTENSION postgis;

Umożliwi to przestrzennie włączenie bazy danych.

RK
źródło
Czy nadal można stosować metodę szablonów? Czy istnieje sposób, aby dodać te informacje do okna dialogowego „nowej bazy danych” w pgAdminIII?
monkut
prawdopodobnie też chcesz dodaćCREATE EXTENSION postgis_topology;
matt wilkie
1
@monkut w pgAdmin4 jest to dostępne poprzez kliknięcie prawym przyciskiem myszy na „Rozszerzeniach” w drzewie nawigacji
Matt Wilkie
CREATE EXTENSIONpotrzebuje uprawnień administratora, więc tworzenie / używanie szablonu może być bardzo dobrym pomysłem.
Cromax
3

w rzeczywistości jest to podstawa instalacji Postgis.

jeśli masz szablon postgis, możesz utworzyć z niego nową bazę danych jako:

 createdb -T postgistemplate -O gis gisdb

jeśli go nie masz, możesz to zrobić w ten sposób:

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

możesz użyć skryptów bash Debian / Ubuntu - create_template_postgis-debian.sh, tutaj

Mam nadzieję, że Ci to pomoże...

Aragonia
źródło
Prawdopodobnie jest tak, że użytkownik postgresnie ma uprawnień do korzystania z terminala, w którym to przypadku sudo su postgrespolecenie po cichu się nie powiedzie. Aby temu zaradzić, możesz poprzedzić wszystkie te polecenia, sudo -u postgresaby uruchomić polecenie jako użytkownik postgres bez przełączania się na użytkownika postgres.
Zadzwoń
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

Używam tego skryptu bash, aby wykonać tworzenie nowej bazy danych z włączonym postgis i nazwą podaną na stdin.

Postgres 9.3

PostGIS 2.1.3

andilabs
źródło