เพิ่มฟังก์ชัน Spatial ของ PostGIS ให้กับสคีมาที่กำหนดเองนอกเหนือจาก“ สาธารณะ” ใน PostgreSQL


15

เมื่อเร็ว ๆ นี้ฉันสร้างฐานข้อมูล PostGIS 2.0.3 บนเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL 9.1 โดยใช้ pgAdmin พบส่วนขยาย "PostGIS" ที่ติดตั้งใน "ส่วนขยาย" ฟังก์ชันเชิงพื้นที่อัลถูกเพิ่มเข้าไปในสคีมา "สาธารณะ" ไม่เป็นไร.

ตอนนี้ฉันต้องการเก็บข้อมูลทั้งหมดของฉันลงในรูปแบบใหม่ที่เรียกว่า "gc" อย่างไรก็ตามฉันจะสร้างฟังก์ชั่นอวกาศทั้งหมดใน schema "gc" นั้นได้อย่างไร ไม่มีฟังก์ชั่นเดียวในสคีมา อย่างไรก็ตามเมื่อฉันพยายามที่จะนำเข้า / ใหม่คลาสฟีเจอร์จาก ESRI ArcCatalog 10.1 ไปที่สคีมามันก็ใช้ได้! คลาสคุณสมบัติสามารถนำเข้าและแสดงใน QGIS

ใครช่วยบอกเคล็ดลับหรือความคิดเกี่ยวกับมันให้ฉันได้บ้าง

ฉันยังใหม่กับ PostgreSQL และ PostGIS


เพิ่งสังเกตเห็น: จัดการกับแล้วที่gis.stackexchange.com/questions/43187/…
มาร์ติน F

@MartinF มีคือ (ไม่สมบูรณ์) คำตอบของคำถามนี้ได้ที่คำถามที่คุณเชื่อมโยง แต่คำถามที่เป็นจริงขอให้บางสิ่งบางอย่างที่แตกต่างกันมาก
Kenny Evitt

คำถามนี้อาจมีชื่อว่า "การติดตั้ง PostGIS ลงในสคีมาที่ไม่ใช่สาธารณะ"
Kenny Evitt

คำตอบ:


3

นี่คือตัวอย่างคำสั่งสำหรับการติดตั้งส่วนขยาย PostGIS ลงในgcสคีมา:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

นี่คือตัวอย่างคำสั่งเพื่อย้าย PostGIS และวัตถุไปยัง schema ใหม่สำหรับเวอร์ชัน 2.4.4 ของ PostGIS ในกรณีที่คุณติดตั้งแล้ว:

CREATE SCHEMA gc;

UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';

ALTER EXTENSION postgis
SET SCHEMA gc;

ALTER EXTENSION postgis
UPDATE TO "2.4.4next";

ALTER EXTENSION postgis
UPDATE TO "2.4.4";

สิ่งนี้ไม่จำเป็นอย่างเคร่งครัด มีประโยชน์เพียง:

ALTER DATABASE whatever
SET search_path = public,gc;

1

Kenny Evittได้อธิบายสิ่งที่สำคัญที่สุดแล้ว อย่างไรก็ตามนี่คือข้อมูลเพิ่มเติมบางส่วน:

Postgresql มีฐานข้อมูลพื้นที่ตารางและสกีมาและเป็นไปไม่ได้ที่จะทำการเชื่อมต่อจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลเพราะแยกอย่างเคร่งครัด ฐานข้อมูลหนึ่งสามารถมีมากกว่าหนึ่งสกีมาและเป็นไปได้ที่จะเข้าร่วมบางอย่างจากหนึ่งไปยังอีก schema สำหรับข้อมูลเพิ่มเติมดูที่เอกสาร:

ความเป็นไปได้อีกอย่างในการโหลด PostGIS ใน gc schema ของคุณจะเป็นดังนี้:

t=# create schema gc;
CREATE SCHEMA
t=# set search_path to gc;
SET
t=# create extension postgis;
CREATE EXTENSION

ฉันไม่ใช่ผู้เชี่ยวชาญใน Arc Catalog หรือ pgadmin แต่ฉันถือว่าหนึ่งในสามสิ่งต่อไปนี้เกิดขึ้น:

  1. PostgreSQL สนับสนุนประเภทข้อมูลทางเรขาคณิตโดยกำเนิด แต่คุณไม่ควรเชื่อถือสิ่งนี้ในบริบททางภูมิศาสตร์เนื่องจากข้อมูลเมตา CRS และการแปลงไม่ได้รับ คุณเพิ่งโชคดีและไม่มีอะไรพัง
  2. แค็ตตาล็อก Arc อย่างใดหลังจากไม่พบส่วนขยาย PostGIS สร้างขึ้นโดยไม่แจ้งผู้ใช้ เพื่อตรวจสอบว่าคุณสามารถดูตารางที่มีอยู่ก่อนและหลังขั้นตอนนั้น

ใน psql คุณสามารถทำได้โดยพิมพ์:

\d
           List of Relations
 Schema |       Name        |   Type  | Owner 
--------+-------------------+---------+----------
 gc     | geography_columns | View    | postgres
 gc     | geometry_columns  | View    | postgres
 gc     | raster_columns    | View    | postgres
 gc     | raster_overviews  | View    | postgres
 gc     | spatial_ref_sys   | Table   | postgres

หากคุณเห็นสิ่งนี้แสดงว่า PostGIS ได้รับการติดตั้งเป็นส่วนขยาย ความเป็นไปได้ที่สามคือ ArcCatalog ทำสิ่งนี้:

set search_path to $all_schemas;
import to gc;

ในกรณีนี้คุณก็โชคดีเช่นกัน แต่บางที ArcCatalog ทำอะไรที่ซับซ้อนกว่านี้ในตอนท้าย ...


0

นี่คือทางออกของคุณ:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

หากคุณติดตั้งส่วนขยาย postGIS ในสคีมาสาธารณะของคุณแล้วและต้องการย้ายใน gc ให้เขียนรหัสต่อไปนี้:

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

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