Bagaimana cara membuat template PostGIS?

19

Saya mengikuti tutorial untuk menginstal pgrouting. Namun, saya tidak mendapatkan bagian ketika dikatakan

Mulai pgAdmin dan buat database baru berdasarkan templat PostGIS Anda

Di mana saya bisa mendapatkan templat postgis ini? Saya tahu saya telah menginstal PostGIS menggunakan homebrew. Tetapi saya tidak dapat menemukan templatnya. Saya menjalankan makro sekarang.

rajan sthapit
sumber
1
Versi PostGIS mana yang Anda gunakan?
RK

Jawaban:

16

Metode Baru Dengan PostgreSQL 9.1

Berkat saran RK di bawah ini, saya melihat tutorial ini dan menemukan bahwa untuk PostgreSQL 9.1 yang perlu Anda lakukan adalah menambahkan ekstensi postgisdan postgis_topologyke database yang ada menggunakan menu konteks pgAdmin. Untuk membuat template postgis, saya membuat database baru yang disebut template-postgisdan kemudian menambahkan ekstensi ini. Saya kemudian membuat database saya yang lain menggunakan templat ini. Saat menggunakan pg_dumpsaya menemukan ukuran ekspor jauh lebih kecil, karena tampaknya hanya menyertakan garis-garis ini dan tidak membuang fungsi ekstensi:

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

Metode Redundan Lama:

Saya akhirnya menggunakan file .sql di sini:

/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

Juga, saya mendapatkan kesalahan ini ketika saya mengimpor database PostGIS yang ada ke database baru yang dibuat dari template ini:

ERROR:  type "spheroid" already exists

Jadi saya mengikuti instruksi di sini dan digunakan ON_ERROR_ROLLBACK=onuntuk mengatur template, setelah membuat database kosong yang disebut "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

Dan kemudian mengimpor db cadangan saya, misalnya:

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

Metode yang lebih tua:

Saya melakukan ini:

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

Path ke postgis--2.0.1.sqlakan berbeda tergantung pada pengaturan Anda.

Aram Kocharyan
sumber
Untuk menyelesaikan jawaban Anda (yang berfungsi pada Mac saya): pada Mac, jika Anda menginstal postgis dari port Kyngchaos, file instalasi postgis adalah: /usr/local/pgsql/share/extension/postgis--2.0.1.sql
Bruno von Paris
Untuk metode terbaru, apakah 'SCHEMA' diperlukan? Untuk apa ini? (Milikmu adalah satu-satunya contoh yang pernah kulihat sejauh ini.)
matt wilkie
14

Jika Anda menjalankan PostgreSQL 9.1+, Anda tidak perlu repot dengan database templat . Cukup buat database dan kemudian pada tampilan SQL di pgAdmin, ketik dan jalankan

CREATE EXTENSION postgis;

Itu akan secara spasial mengaktifkan basis data Anda.

RK
sumber
Apakah metode templat masih dapat digunakan? Atau, adakah cara untuk menambahkan info ini ke dialog "database baru" di pgAdminIII?
monkut
Anda mungkin juga ingin menambahkanCREATE EXTENSION postgis_topology;
matt wilkie
1
@monkut di pgAdmin4 ini tersedia melalui klik kanan pada 'Extensions' di pohon navigasi
matt wilkie
CREATE EXTENSIONmembutuhkan hak akses superuser, jadi sebenarnya membuat / menggunakan template mungkin ide yang sangat bagus.
Cromax
3

sebenarnya ini adalah dasar dari instalasi postgis.

jika Anda memiliki template postgis, Anda dapat membuat database baru dari itu sebagai:

 createdb -T postgistemplate -O gis gisdb

jika Anda tidak memilikinya, Anda dapat melakukannya dengan cara ini:

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

Anda dapat menggunakan skrip bash Debian / Ubuntu - create_template_postgis-debian.sh, di sini

Saya harap ini membantu Anda ...

Aragon
sumber
Ini mungkin karena pengguna postgrestidak memiliki izin untuk menggunakan terminal, dalam hal ini sudo su postgresperintah akan gagal secara diam-diam. Untuk melewati ini Anda dapat mendahului semua perintah ini dengan sudo -u postgresmenjalankan perintah sebagai pengguna postgres tanpa beralih ke pengguna postgres.
Cincin
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

Saya menggunakan skrip bash ini untuk mengeksekusi pembuatan database baru dengan postgis diaktifkan dan nama diberikan pada stdin.

Postgres 9.3

PostGIS 2.1.3

andilab
sumber