ใช้อาร์เรย์ [] ประเภทข้อมูลใน QGIS จาก PostgreSQL


9

ฉันเป็นผู้เริ่มต้นใน GIS ดังนั้นฉันยินดีที่จะเห็นความคิดเห็นใด ๆ ที่นี่

ฉันมีตารางใน PostgreSQL ซึ่งฉันเชื่อมต่อกับ QGIS array[]มีคอลัมน์ในตารางที่มีประเภทข้อมูลเป็น แต่ผู้ใช้สามารถแทรกข้อมูลลงในคอลัมน์โดยใช้มุมมองเช่น {a, d, c} ไม่สะดวก มีวิธีง่าย ๆ ในการแก้ไขข้อมูลหรือไม่

ฉันมีความคิดที่จะใส่ข้อมูลใน QGIS เช่น 'a, b, c' และสร้างtriggerINSERT / UPDATE ก่อนที่จะใส่ข้อมูลลงในPostgresตารางอย่างถูกต้อง แต่มันก็ดูเหมือนจะไม่ใช่วิธีที่ดีที่สุด

คำตอบ:


1

วิธีเดียวที่ฉันรู้คือ 'kludge ต่อการใช้งาน'

ตัวอย่างเช่นฉันมีข้อมูลที่มีอาร์เรย์ของหมายเลขคุณสมบัติ (ชื่อแอตทริบิวต์propnum_array, dtype varchar[]) และบางครั้งฉันต้องการระบุข้อมูลใด ๆ ที่อาเรย์นั้นว่างเปล่า

การทดสอบpropnum_array = {}หรือ propnum_array is nullหรือpropnum[0]=''(หรือรูปแบบอื่น ๆ ของชุดรูปแบบนั้น) ทำให้ QGIS ปิดปาก แต่ฉันสามารถทำ regexp_match( propnum_array,'\\d')หรือpropnum_array ilike '{""}'หรือ propnum_array = '{""}'และแบ่งพาร์ติชันข้อมูลเป็นสิ่งที่ไม่ว่างเปล่าpropnum_arrayและสิ่งที่ไม่ได้

สิ่งนี้หมายความว่าถ้าอาร์เรย์มีโครงสร้าง (เช่นค่าเฉพาะที่องค์ประกอบเฉพาะในอาร์เรย์) คุณสามารถสแกนหาค่าเหล่านั้น: หากคุณต้องการค่าทั้งหมดที่องค์ประกอบที่สองในอาร์เรย์ 3 องค์ประกอบคือ 'Y' คุณจะต้องการอะไรregexp_match( propnum_array,'[,]*\'Y\'\[,]*')ซักอย่าง(ค่อนข้างแน่ใจว่าคุณต้องหลีกเลี่ยงเครื่องหมายจุลภาคและเครื่องหมายคำพูดเดี่ยวภายในสตริงการจับคู่ แต่นั่นเป็นกรณีการใช้งานสำหรับคนอื่นที่ต้องกังวล)

ความจริงที่ใช้propnum_array ilike '{""}'งานได้ดูเหมือนว่าจะบ่งบอกว่า QGIS ปฏิบัติต่ออาร์เรย์ราวกับว่าพวกเขาเป็นข้อความ หรืออาจใช้วิธีโยนมันลงบนข้อความได้ทันทีหากจำเป็น - แต่ก็ไม่เหมาะสมที่จะไม่มีประเภทของอาร์เรย์ (AFAIK) ฉันไม่สามารถค้นหาเอกสารใด ๆ เกี่ยวกับการจัดการอาร์เรย์และมีคำถามเกี่ยวกับรายชื่อผู้รับจดหมาย osgeo-qgis เมื่อเร็ว ๆ นี้ในเดือนมกราคม 2015

ฉันเดาว่าคำใบ้หลักคือไม่มีฟังก์ชันอาเรย์ในตัวแก้ไขนิพจน์แม้ว่าฉันเข้าใจว่าปลั๊กอิน'Data Driven Input Mask'มีการจัดการอาเรย์ตั้งแต่ v1.0.0 (ก.พ. 2015)

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