ใช้สคีมาที่ไม่ใช่สาธารณะใน PostGIS หรือไม่


21

ฉันกำลังติดตั้ง PostGIS 2.0.2 และ PostgreSQL 9.1.6 ใหม่บน Ubuntu ฉันเพิ่งเจอข้อมูลบางอย่างที่ บ่งชี้ว่าการใช้สคีมาสาธารณะเพื่อเก็บข้อมูลทั้งหมดไม่ใช่ความคิดที่ดี

ด้วยเหตุนี้ฉันจึงได้ตั้งค่าสคีมาที่เรียกว่าข้อมูลและทำให้ตัวเองเป็นเจ้าของ แต่เป็นความคิดที่ดีหรือไม่

ความกังวลของฉันคือ:

  1. นอกจากการตั้งค่าเจ้าของแล้วฉันอาจต้องใส่ใจกับสิ่งต่าง ๆ บนแท็บสิทธิ์เมื่อสร้าง schema ใหม่นี้ (ผ่าน pgAdmin III);
  2. ฉันอาจไม่ได้รับประโยชน์แบบเดียวกันด้วยการจัดเก็บข้อมูลของฉันในสคีมาสาธารณะและทิ้งข้อมูลทั้งหมดไว้ในสคีมาที่แยกต่างหากก่อนทำการสำรองข้อมูล / กู้คืน (การทำเช่นนี้จะช่วยประหยัดการกดแป้นพิมพ์สองสามครั้ง และ
  3. ฉันอาจพบปัญหาโดยไม่มีตาราง PostGIS เริ่มต้นและมุมมองใน schema ข้อมูลใหม่ของฉัน (อยู่ใน schema สาธารณะภายในฐานข้อมูลเดียวกัน)

1
ลองดูคำตอบใหม่ที่นี่gis.stackexchange.com/a/270522/6052
Evan Carroll

3
ใช่มันยังคงใช้ได้ ประเด็นหลักคือความสะอาดขณะที่คุณแยกข้อมูลผู้ใช้ออกจากข้อมูลระบบและฟังก์ชั่น
John Powell

ฉันไม่ใช่ผู้ใช้ PostGIS แต่ฉันสงสัยว่าคำตอบที่ดีที่สุดสำหรับคำถามของคุณอาจเป็นgis.stackexchange.com/a/270522/115ดังนั้นถ้าคุณเห็นด้วยฉันอยากให้คุณย้ายเครื่องหมายถูกยอมรับไป
PolyGeo

1
คำถามนี้ควรเป็นสองคำถาม คำตอบที่ยอมรับไม่ตอบคำถามตามที่เขียนไว้ คำถามนี้ควรเปิดขึ้นอีกครั้งเนื่องจากไม่ใช่คำถามที่ซ้ำกันซึ่งถามว่าวัตถุ PostGIS สามารถทำงานกับวัตถุที่ไม่ได้อยู่ในpublicสคีมาได้หรือไม่ ว่าคำถามอื่น ๆ ที่เป็นเรื่องเกี่ยวกับการติดตั้ง PostGIS publicวัตถุนามสกุลเป็นสคีอื่นที่ไม่ใช่ นี่คือสองสิ่งที่แตกต่าง!
Kenny Evitt

คำตอบ:


7

ตอนนี้แก้ไขได้ที่เว็บไซต์ทางการในหน้าชื่อส่วนขยายย้าย PostGIS ไปยังสคีมาอื่น publicวิธีที่ถูกต้องคือการติดตั้งส่วนขยายเข้าไปใน นี่เป็นทางเลือกเดียวเท่านั้น ส่วนขยายไม่รองรับการย้ายอีกต่อไป สิ่งต่อไปคือการเรียกใช้คำสั่งต่อไปนี้ (คัดลอกมาจากเว็บไซต์)

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
นี่ไม่ได้ตอบคำถามตามที่เขียนไว้; ไม่ควรเป็นคำตอบที่ยอมรับได้ มีการถามอย่างชัดเจนเกี่ยวกับ "ไม่มีตาราง PostGIS และมุมมองเริ่มต้นในdataสคีมาใหม่ของฉัน(อยู่ในpublicสคีมาภายในฐานข้อมูลเดียวกัน)" คำตอบนี้จะเป็นประโยชน์และเป็นสิ่งที่ผมมองหา แต่ก็ไม่ได้โดยตรงที่เกี่ยวข้องกับคำถามที่ว่า
Kenny Evitt

20

เมื่อคุณเปิดใช้งานฐานข้อมูล PostGIS เชิงพื้นที่ฟังก์ชันที่เกี่ยวข้องตาราง SRS และมุมมองจะอยู่ในสคีมาสาธารณะตามที่คุณระบุ นั่นไม่ได้หมายความว่าตารางเชิงพื้นที่ทั้งหมดหรือใด ๆ ของคุณจำเป็นต้องอยู่ในสคีมาสาธารณะเดียวกัน PostGIS จะยังคงทำงานกับข้อมูลเชิงพื้นที่ทั้งหมดในสกีมา "ใหม่"

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

ดังนั้นฉันคิดว่าคุณทำได้ดี ท้ายที่สุดในกรณีที่คุณไม่ได้ทำมันเป็นความคิดที่ดีที่จะเพิ่มสคีมาใหม่ในเส้นทางการค้นหา:

ALTER DATABASE my_db SET search_path = gc, public;


ขอบคุณมาร์ติน หมายความว่าฉันสามารถใช้ฟังก์ชันเชิงพื้นที่บนตารางในสคีมาที่กำหนดเองที่ไม่ใช่ "สาธารณะ" ได้หรือไม่?
alextc

คุณจะเพิ่มข้อมูลลงในสคีมาอื่นได้อย่างไร ไม่ใช่publicเหรอ การเพิ่มข้อมูลด้วยเช่น shp2psqlจะtest.tableยังคงทำให้ข้อมูลในpublic?
knutole

@knutole ดังที่ฉันกล่าวถึงฉันใช้ ArcCatalog เพื่อนำเข้า / คลาสคุณสมบัติใหม่ ฉันไม่แน่ใจว่าคุณสามารถใช้ shp2psql เพื่อเพิ่มข้อมูลลงในสคีมาที่กำหนดเองอื่นที่ไม่ใช่สาธารณะได้หรือไม่
alextc

1
นี่ควรเป็นคำตอบที่ยอมรับได้
Kenny Evitt

12
  1. หนึ่งในกลยุทธ์ขององค์กรที่เป็นไปได้ที่คุณสามารถสร้างด้วยสคีมาคือการอนุญาตให้ผู้ใช้เรียกใช้อาละวาดในสคีมาเดียว ดังนั้นหากคุณต้องการใช้สคีมาด้วยวิธีนี้สามารถทำได้ในแท็บสิทธิ์ของ pgAdmin แต่คุณไม่จำเป็นต้องทำเช่นนั้นดังนั้นหากคุณต้องการรักษาสิทธิ์เดิมไว้ในหลาย ๆ รูปแบบ

  2. จากบทความที่คุณเชื่อมโยงกับปัญหาที่ทำให้ทุกอย่างเป็นสาธารณะคือเมื่อคุณถ่ายโอนข้อมูลคุณมีแนวโน้มที่จะได้รับตารางระบบและความสัมพันธ์ที่ปะปนกับข้อมูลของคุณ หากคุณย้ายข้อมูลทั้งหมดของคุณไปยังสคีมาใหม่คุณไม่ต้องกังวลอีกต่อไป

  3. ไม่มีปัญหาเลย (สำหรับหลักฐานโปรดสังเกตว่าคุณไม่จำเป็นต้องระบุ public.spatial_ref_sys เมื่อคุณต้องการค้นหาตาราง SRS)


6

อีกหนึ่งเคล็ดลับ (บางทีคุณอาจเคยเจอมาแล้ว) คุณอาจต้องการเพิ่มสคีมา "data" ใน search_path เริ่มต้นของผู้ใช้ สิ่งที่ต้องการ:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

เกี่ยวกับประเด็นที่ 2 บางครั้งคุณจำเป็นต้องกู้คืนเมื่อคุณไม่สามารถเข้าถึงฐานข้อมูลต้นฉบับได้อีกต่อไป (นั่นเป็นหนึ่งในเหตุผลในการสำรองข้อมูล ... ) ดังนั้นคุณอาจไม่มีโอกาสย้ายข้อมูลของคุณไปยังสคีมาแยกต่างหากเมื่อคุณต้องการ


1

เราใช้สคีมาสาธารณะสำหรับการวิเคราะห์ผลลัพธ์ชั่วคราว / ตาราง dev จากนั้นไปที่สกีมาที่จัดระเบียบมากขึ้น (โฟลเดอร์?) เพื่อการใช้งานถาวร

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