วิธีการใหม่ด้วย 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
จะแตกต่างกันไปขึ้นอยู่กับการตั้งค่าของคุณ