วิธีสร้างเทมเพลต PostGIS


19

ฉันกำลังติดตามกวดวิชาเพื่อติดตั้ง pgrouting อย่างไรก็ตามฉันไม่ได้รับส่วนเมื่อมันบอกว่า

เริ่ม pgAdmin และสร้างฐานข้อมูลใหม่โดยยึดตามแม่แบบ PostGISของคุณ

ฉันจะรับเทมเพลต postgis นี้ได้ที่ไหน ฉันรู้ว่าฉันติดตั้ง PostGIS โดยใช้ homebrew แต่ฉันไม่พบแม่แบบ ตอนนี้ฉันกำลังใช้งาน macos อยู่


1
คุณใช้ PostGIS รุ่นใด
RK

คำตอบ:


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;

ที่จะเปิดใช้งานฐานข้อมูลของคุณ


ยังสามารถใช้วิธีแม่แบบได้หรือไม่? หรือมีวิธีการเพิ่มข้อมูลนี้ในกล่องโต้ตอบ "ฐานข้อมูลใหม่" ใน pgAdminIII หรือไม่?
monkut

คุณอาจต้องการเพิ่มCREATE EXTENSION postgis_topology;
matt wilkie

1
@monkut ใน pgAdmin4 สามารถใช้ได้ผ่านทางคลิกขวาที่ 'ส่วนขยาย' ใน
แผนผัง

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

คุณสามารถใช้สคริปต์ทุบตี 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

ฉันใช้สคริปต์ทุบตีนี้เพื่อดำเนินการสร้างฐานข้อมูลใหม่ด้วยการเปิดใช้งาน postgis และชื่อที่ให้ไว้ใน stdin

Postgres 9.3

PostGIS 2.1.3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.